diff --git a/.github/workflows/build-and-test-Linux.yaml b/.github/workflows/build-and-test-Linux.yaml new file mode 100644 index 00000000000..e1c916dd4f5 --- /dev/null +++ b/.github/workflows/build-and-test-Linux.yaml @@ -0,0 +1,53 @@ +name: Build Linux partially with CPROVER tools + +on: + pull_request: + branches: + - '**' + +jobs: + CompileLinux: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + with: + submodules: true + - name: Install Packages + env: + # This is needed in addition to -yq to prevent apt-get from asking for + # user input + DEBIAN_FRONTEND: noninteractive + run: | + sudo apt-get update + sudo apt-get install --no-install-recommends -y g++ flex bison cmake ninja-build maven jq libxml2-utils dpkg-dev ccache + sudo apt-get install --no-install-recommends -y libssl-dev libelf-dev libudev-dev libpci-dev libiberty-dev autoconf + sudo apt-get install --no-install-recommends -y gawk jq + + - name: Prepare ccache + uses: actions/cache@v2 + with: + path: .ccache + key: ${{ runner.os }}-20.04-make-${{ github.ref }}-${{ github.sha }}-KERNEL + restore-keys: | + ${{ runner.os }}-20.04-make-${{ github.ref }} + ${{ runner.os }}-20.04-make + - name: ccache environment + run: | + echo "CCACHE_BASEDIR=$PWD" >> $GITHUB_ENV + echo "CCACHE_DIR=$PWD/.ccache" >> $GITHUB_ENV + - name: Zero ccache stats and limit in size + run: ccache -z --max-size=500M + - name: Build CBMC tools + run: | + make -C src minisat2-download + make -C src CXX='ccache /usr/bin/g++' cbmc.dir goto-cc.dir goto-diff.dir -j2 + - name: Print ccache stats + run: ccache -s + + - name: Run (Docker Based) Linux Build test + run: integration/linux/compile_linux.sh + + - uses: actions/upload-artifact@v2 + with: + name: CPROVER-faultyInput + path: CPROVER/faultyInput/* diff --git a/.github/workflows/pull-request-checks.yaml b/.github/workflows/pull-request-checks.yaml index 8e82d9b28de..f8218b86da1 100644 --- a/.github/workflows/pull-request-checks.yaml +++ b/.github/workflows/pull-request-checks.yaml @@ -364,7 +364,8 @@ jobs: # user input DEBIAN_FRONTEND: noninteractive run: | - pip install unidiff + sudo apt-get update + sudo apt-get install --no-install-recommends -yq python3-unidiff - name: Check updated lines of code meet linting standards env: BASE_BRANCH: ${{ github.base_ref }} diff --git a/integration/linux/compile_linux.sh b/integration/linux/compile_linux.sh new file mode 100755 index 00000000000..62f8682443b --- /dev/null +++ b/integration/linux/compile_linux.sh @@ -0,0 +1,89 @@ +#!/bin/bash + +# Fail on errors +# set -e # not for now + +# Show steps we execute +set -x + +# This script needs to operate in the root directory of the CBMC repository +SCRIPT=$(readlink -e "$0") +readonly SCRIPT +SCRIPTDIR=$(dirname "$SCRIPT") +readonly SCRIPTDIR +cd "$SCRIPTDIR/../.." + +# Build CBMC tools +make -C src minisat2-download +make -C src CXX='ccache /usr/bin/g++' cbmc.dir goto-cc.dir goto-diff.dir -j$(nproc) + +# Get one-line-scan, if we do not have it already +[ -d one-line-scan ] || git clone https://github.com/awslabs/one-line-scan.git one-line-scan + +# Get Linux v5.10, if we do not have it already +[ -d linux_5_10 ] || git clone -b v5.10 --depth=1 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux_5_10 + +# Prepare compile a part of the kernel with CBMC via one-line-scan +ln -s goto-cc src/goto-cc/goto-ld +ln -s goto-cc src/goto-cc/goto-as +ln -s goto-cc src/goto-cc/goto-g++ + + +configure_linux () +{ + pushd linux_5_10 + + cat > kvm-config < --incremental" +) diff --git a/regression/cbmc-cpp/Address_of_Method1/main.cpp b/regression/cbmc-cpp/Address_of_Method1/main.cpp new file mode 100644 index 00000000000..cc6bdbe3878 --- /dev/null +++ b/regression/cbmc-cpp/Address_of_Method1/main.cpp @@ -0,0 +1,18 @@ +#include +struct x +{ + void f(); + + static int i; +}; + +void x::f() +{ +} + +int main() +{ + assert(&x::f != 0); + + assert(&x::i != 0); +} diff --git a/regression/cbmc-cpp/Address_of_Method1/test.desc b/regression/cbmc-cpp/Address_of_Method1/test.desc new file mode 100644 index 00000000000..7791be248c7 --- /dev/null +++ b/regression/cbmc-cpp/Address_of_Method1/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Anonymous_members1/main.cpp b/regression/cbmc-cpp/Anonymous_members1/main.cpp new file mode 100644 index 00000000000..e34d0a3d680 --- /dev/null +++ b/regression/cbmc-cpp/Anonymous_members1/main.cpp @@ -0,0 +1,29 @@ +#include +typedef unsigned DWORD; +typedef signed LONG; +typedef long long LONGLONG; + +typedef union _LARGE_INTEGER { + struct + { + DWORD LowPart; + LONG HighPart; + }; + struct + { + DWORD LowPart; + LONG HighPart; + } u; + + LONGLONG QuadPart; +} LARGE_INTEGER; + +int main() +{ + LARGE_INTEGER l; + + l.QuadPart = 1; + l.LowPart = 2; + l.u.LowPart = 3; + assert(l.LowPart == 3); +} diff --git a/regression/cbmc-cpp/Anonymous_members1/test.desc b/regression/cbmc-cpp/Anonymous_members1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Anonymous_members1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Array1/main.cpp b/regression/cbmc-cpp/Array1/main.cpp new file mode 100644 index 00000000000..3ed620706cb --- /dev/null +++ b/regression/cbmc-cpp/Array1/main.cpp @@ -0,0 +1,10 @@ +int y[5][4][3][2]; + +int main() +{ + for(int i = 0; i < 5; i++) + for(int j = 0; j < 4; j++) + for(int k = 0; k < 3; k++) + for(int l = 0; l < 2; l++) + y[i][j][k][l] = 2; +} diff --git a/regression/cpp-from-CVS/Array1/test.desc b/regression/cbmc-cpp/Array1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Array1/test.desc rename to regression/cbmc-cpp/Array1/test.desc diff --git a/regression/cbmc-cpp/Array2/main.cpp b/regression/cbmc-cpp/Array2/main.cpp new file mode 100644 index 00000000000..8bc25491f92 --- /dev/null +++ b/regression/cbmc-cpp/Array2/main.cpp @@ -0,0 +1,10 @@ +int y[2][3][4][5]; + +int main() +{ + for(int i = 0; i < 5; i++) + for(int j = 0; j < 4; j++) + for(int k = 0; k < 3; k++) + for(int l = 0; l < 2; l++) + y[i][j][k][l] = 2; // out-of-bounds +} diff --git a/regression/cpp-from-CVS/Array2/test.desc b/regression/cbmc-cpp/Array2/test.desc similarity index 100% rename from regression/cpp-from-CVS/Array2/test.desc rename to regression/cbmc-cpp/Array2/test.desc diff --git a/regression/cbmc-cpp/Array3/main.cpp b/regression/cbmc-cpp/Array3/main.cpp new file mode 100644 index 00000000000..9cb355190a8 --- /dev/null +++ b/regression/cbmc-cpp/Array3/main.cpp @@ -0,0 +1,11 @@ +struct C +{ + static const char *array[1]; +}; + +const char *C::array[1] = {"HELLO"}; + +int main(int argc, const char *argv[]) +{ + assert(*C::array[0] == 'H'); +} diff --git a/regression/cpp-from-CVS/Constructor14/test.desc b/regression/cbmc-cpp/Array3/test.desc similarity index 100% rename from regression/cpp-from-CVS/Constructor14/test.desc rename to regression/cbmc-cpp/Array3/test.desc diff --git a/regression/cpp-from-CVS/Array4/elsewhere.cpp b/regression/cbmc-cpp/Array4/elsewhere.cpp similarity index 81% rename from regression/cpp-from-CVS/Array4/elsewhere.cpp rename to regression/cbmc-cpp/Array4/elsewhere.cpp index 883be4f34df..d3fe0fd689d 100644 --- a/regression/cpp-from-CVS/Array4/elsewhere.cpp +++ b/regression/cbmc-cpp/Array4/elsewhere.cpp @@ -4,5 +4,5 @@ void elsewhere() { char ch; // should fail, this is out of bounds - ch=my_string[10]; + ch = my_string[10]; } diff --git a/regression/cbmc-cpp/Array4/main.cpp b/regression/cbmc-cpp/Array4/main.cpp new file mode 100644 index 00000000000..4da4be4641a --- /dev/null +++ b/regression/cbmc-cpp/Array4/main.cpp @@ -0,0 +1,8 @@ +char my_string[] = "abc"; + +void elsewhere(); + +int main() +{ + elsewhere(); +} diff --git a/regression/cpp-from-CVS/Array4/test.desc b/regression/cbmc-cpp/Array4/test.desc similarity index 100% rename from regression/cpp-from-CVS/Array4/test.desc rename to regression/cbmc-cpp/Array4/test.desc diff --git a/regression/cbmc-cpp/Assignment1/main.cpp b/regression/cbmc-cpp/Assignment1/main.cpp new file mode 100644 index 00000000000..3e9e3a57254 --- /dev/null +++ b/regression/cbmc-cpp/Assignment1/main.cpp @@ -0,0 +1,40 @@ +#include +struct A +{ + int i; +}; + +struct B +{ + int i; + B &operator=(const B &b) + { + i = b.i; + return *this; + } +}; + +A funcA() +{ + A a; + a.i = 10; + return a; +} + +B funcB() +{ + B b; + b.i = 10; + return b; +} + +int main() +{ + A a; + a.i = 20; + assert((funcA() = a).i == 20); // legal + + B b; + b.i = 20; + assert((funcB() = b).i == 20); // legal +} diff --git a/regression/cbmc-cpp/Assignment1/test.desc b/regression/cbmc-cpp/Assignment1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Assignment1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Class_Members1/main.cpp b/regression/cbmc-cpp/Class_Members1/main.cpp new file mode 100644 index 00000000000..fc204b03937 --- /dev/null +++ b/regression/cbmc-cpp/Class_Members1/main.cpp @@ -0,0 +1,29 @@ +#include +class t +{ +public: + int i; + void f(); + + void g(double xxx = 3.2); +}; + +void t::f() +{ + i = 1; +} + +void t::g(double d) +{ + i = (int)d; +} + +int main() +{ + t instance; + instance.f(); + assert(instance.i == 1); + + instance.g(2.1); + assert(instance.i == 2); +} diff --git a/regression/cbmc-cpp/Class_Members1/test.desc b/regression/cbmc-cpp/Class_Members1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Class_Members1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Comma_Operator1/main.cpp b/regression/cbmc-cpp/Comma_Operator1/main.cpp new file mode 100644 index 00000000000..46276d6c94a --- /dev/null +++ b/regression/cbmc-cpp/Comma_Operator1/main.cpp @@ -0,0 +1,9 @@ +#include +int main() +{ + int s = 0; + int t = 0; + t = (s = 3, s + 2); + assert(s == 3); + assert(t == 5); +} diff --git a/regression/cbmc-cpp/Comma_Operator1/test.desc b/regression/cbmc-cpp/Comma_Operator1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Comma_Operator1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/ConditionalExpression1/main.cpp b/regression/cbmc-cpp/ConditionalExpression1/main.cpp new file mode 100644 index 00000000000..65a01bcb16a --- /dev/null +++ b/regression/cbmc-cpp/ConditionalExpression1/main.cpp @@ -0,0 +1,13 @@ +#include +int main() +{ + bool b; + int a = 0; + int c = 0; + + b ? a += 1 : c += 1; + + assert(a == 1 || a == 0); + assert(c == 1 || c == 0); + assert(a != c); +} diff --git a/regression/cbmc-cpp/ConditionalExpression1/test.desc b/regression/cbmc-cpp/ConditionalExpression1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/ConditionalExpression1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/ConditionalExpression2/main.cpp b/regression/cbmc-cpp/ConditionalExpression2/main.cpp new file mode 100644 index 00000000000..41e340cd142 --- /dev/null +++ b/regression/cbmc-cpp/ConditionalExpression2/main.cpp @@ -0,0 +1,10 @@ +#include +char a[1]; +char b[2]; + +int main() +{ + char *c = true ? a : b; + assert(*c == a[0]); + return 0; +} diff --git a/regression/cbmc-cpp/ConditionalExpression2/test.desc b/regression/cbmc-cpp/ConditionalExpression2/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/ConditionalExpression2/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Constant5/main.cpp b/regression/cbmc-cpp/Constant5/main.cpp new file mode 100644 index 00000000000..12a7f0a215e --- /dev/null +++ b/regression/cbmc-cpp/Constant5/main.cpp @@ -0,0 +1,9 @@ +const int ASD1 = 1; + +int array[ASD1]; + +int main() +{ + // this sound fail! + (int &)ASD1 = 2; +} diff --git a/regression/cpp-from-CVS/Constant5/test.desc b/regression/cbmc-cpp/Constant5/test.desc similarity index 100% rename from regression/cpp-from-CVS/Constant5/test.desc rename to regression/cbmc-cpp/Constant5/test.desc diff --git a/regression/cbmc-cpp/Constructor1/main.cpp b/regression/cbmc-cpp/Constructor1/main.cpp new file mode 100644 index 00000000000..bf4b39be428 --- /dev/null +++ b/regression/cbmc-cpp/Constructor1/main.cpp @@ -0,0 +1,49 @@ +#include +class t1 +{ +public: + int i; + + t1() + { + i = 1; + } +}; + +class t2 +{ +public: + int i; + + t2() : i(2) + { + } +}; + +class t3 +{ +public: + int i; + + t3(); +}; + +t3::t3() : i(3) +{ +} + +int main() +{ + t1 instance1; + assert(instance1.i == 1); + + t2 instance2; + assert(instance2.i == 2); + + t2 *p = new t2; + assert(p->i == 2); + delete p; + + t3 instance3; + assert(instance3.i == 3); +} diff --git a/regression/cbmc-cpp/Constructor1/test.desc b/regression/cbmc-cpp/Constructor1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Constructor1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Constructor10/main.cpp b/regression/cbmc-cpp/Constructor10/main.cpp new file mode 100644 index 00000000000..2a19ea69dcb --- /dev/null +++ b/regression/cbmc-cpp/Constructor10/main.cpp @@ -0,0 +1,17 @@ +class A +{ +public: + int a; + A(int a) : a(a) + { + } +}; + +A f() +{ + return A(0); +} + +int main() +{ +} diff --git a/regression/cpp-from-CVS/Address_of_Method1/test.desc b/regression/cbmc-cpp/Constructor10/test.desc similarity index 100% rename from regression/cpp-from-CVS/Address_of_Method1/test.desc rename to regression/cbmc-cpp/Constructor10/test.desc diff --git a/regression/cpp-from-CVS/Constructor11/main.cpp b/regression/cbmc-cpp/Constructor11/main.cpp similarity index 100% rename from regression/cpp-from-CVS/Constructor11/main.cpp rename to regression/cbmc-cpp/Constructor11/main.cpp diff --git a/regression/cpp-from-CVS/Constructor11/test.desc b/regression/cbmc-cpp/Constructor11/test.desc similarity index 100% rename from regression/cpp-from-CVS/Constructor11/test.desc rename to regression/cbmc-cpp/Constructor11/test.desc diff --git a/regression/cbmc-cpp/Constructor12/main.cpp b/regression/cbmc-cpp/Constructor12/main.cpp new file mode 100644 index 00000000000..6ab09e8449f --- /dev/null +++ b/regression/cbmc-cpp/Constructor12/main.cpp @@ -0,0 +1,30 @@ +#include +struct A +{ + int i; + A() : i(10) + { + } + +private: + A(const A &a); // disabled +}; + +class B : A +{ +public: + B(){}; + int get_i() + { + return i; + } + +private: + B(B &b); // disabled +}; + +int main() +{ + B b; + assert(b.get_i() == 10); +} diff --git a/regression/cbmc-cpp/Constructor12/test.desc b/regression/cbmc-cpp/Constructor12/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Constructor12/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Constructor13/main.cpp b/regression/cbmc-cpp/Constructor13/main.cpp new file mode 100644 index 00000000000..efd17d5371e --- /dev/null +++ b/regression/cbmc-cpp/Constructor13/main.cpp @@ -0,0 +1,52 @@ +#include +int g; +class A +{ +public: + A(int i) + { + g = i; + }; + +private: + A(); +}; + +class B : A +{ +public: + typedef A base_type; + typedef B this_type; + B() : base_type(10) + { + } + B(const this_type &b) : A(20) + { + g++; + } +}; + +class C : B +{ + typedef B base_type; + typedef C this_type; + +public: + C() : base_type() + { + } + C(const base_type &b) : base_type(b) + { + g++; + } +}; + +C c; + +int main() +{ + assert(g == 10); + B b; + C c2 = b; + assert(g == 22); +} diff --git a/regression/cbmc-cpp/Constructor13/test.desc b/regression/cbmc-cpp/Constructor13/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Constructor13/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Constructor14/main.cpp b/regression/cbmc-cpp/Constructor14/main.cpp new file mode 100644 index 00000000000..f56521f21c8 --- /dev/null +++ b/regression/cbmc-cpp/Constructor14/main.cpp @@ -0,0 +1,21 @@ +struct A +{ + A(int i) : i(i) + { + } + int i; +}; + +A a(1); + +A b = 1; + +int main() +{ + A c(1); + A d = 1; + assert(a.i == 1); + assert(b.i == 1); + assert(c.i == 1); + assert(c.i == 1); +} diff --git a/regression/cpp-from-CVS/Constructor17/test.desc b/regression/cbmc-cpp/Constructor14/test.desc similarity index 100% rename from regression/cpp-from-CVS/Constructor17/test.desc rename to regression/cbmc-cpp/Constructor14/test.desc diff --git a/regression/cbmc-cpp/Constructor15/main.cpp b/regression/cbmc-cpp/Constructor15/main.cpp new file mode 100644 index 00000000000..718b87ee287 --- /dev/null +++ b/regression/cbmc-cpp/Constructor15/main.cpp @@ -0,0 +1,18 @@ +class A +{ +public: + A(){}; + +private: + A(const A &); // disabled + A &operator=(const A &); // disabled +}; + +class B : public A +{ +}; + +int main() +{ + B b; // ok +} diff --git a/regression/cpp-from-CVS/Address_of_Method4/test.desc b/regression/cbmc-cpp/Constructor15/test.desc similarity index 100% rename from regression/cpp-from-CVS/Address_of_Method4/test.desc rename to regression/cbmc-cpp/Constructor15/test.desc diff --git a/regression/cbmc-cpp/Constructor16/main.cpp b/regression/cbmc-cpp/Constructor16/main.cpp new file mode 100644 index 00000000000..4cb8d495b92 --- /dev/null +++ b/regression/cbmc-cpp/Constructor16/main.cpp @@ -0,0 +1,19 @@ +class A +{ +public: + A(){}; + +private: + A(const A &); // disabled + A &operator=(const A &); // disabled +}; + +class B : public A +{ +}; + +int main() +{ + B b1, b2; + b1 = b2; // not ok +} diff --git a/regression/cpp-from-CVS/Constructor16/test.desc b/regression/cbmc-cpp/Constructor16/test.desc similarity index 100% rename from regression/cpp-from-CVS/Constructor16/test.desc rename to regression/cbmc-cpp/Constructor16/test.desc diff --git a/regression/cbmc-cpp/Constructor17/main.cpp b/regression/cbmc-cpp/Constructor17/main.cpp new file mode 100644 index 00000000000..2261a107b01 --- /dev/null +++ b/regression/cbmc-cpp/Constructor17/main.cpp @@ -0,0 +1,26 @@ +class C +{ +public: + C(int &v) : v(v) + { + } + int v; +}; + +struct D +{ + int r; +}; + +int main(int argc, char *argv[]) +{ + int i = 10; + int &ref = i; + C *pc = new C((char &)ref); + assert(pc->v == 10); + D d; + d.r = 10; + D &ref_d = d; + D *pd = new D(ref_d); + assert(pd->r == 10); +} diff --git a/regression/cpp-from-CVS/Conversion1/test.desc b/regression/cbmc-cpp/Constructor17/test.desc similarity index 100% rename from regression/cpp-from-CVS/Conversion1/test.desc rename to regression/cbmc-cpp/Constructor17/test.desc diff --git a/regression/cbmc-cpp/Constructor2/main.cpp b/regression/cbmc-cpp/Constructor2/main.cpp new file mode 100644 index 00000000000..f3509762af2 --- /dev/null +++ b/regression/cbmc-cpp/Constructor2/main.cpp @@ -0,0 +1,41 @@ +#include +class t1 +{ +public: + int i; + + t1(); + t1(int z); +}; + +t1::t1() : i(1) +{ +} + +t1::t1(int z) +{ + i = z; +} + +class t2 +{ +public: + int i; + + t2(); + t2(int z); +}; + +t2::t2() : i(1) +{ +} + +t2::t2(int z) +{ +} + +int main() +{ + t1 instance1(5); + assert(instance1.i == 5); +} diff --git a/regression/cbmc-cpp/Constructor2/test.desc b/regression/cbmc-cpp/Constructor2/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Constructor2/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Constructor3/main.cpp b/regression/cbmc-cpp/Constructor3/main.cpp new file mode 100644 index 00000000000..3d8d583fb7e --- /dev/null +++ b/regression/cbmc-cpp/Constructor3/main.cpp @@ -0,0 +1,21 @@ +#include +class x +{ +public: + x(); + x(int z); + int i; +}; + +x::x() : i(1) +{ +} +x::x(int z) : i(z) +{ +} + +int main() +{ + x a(5); + assert(a.i == 5); +} diff --git a/regression/cbmc-cpp/Constructor3/test.desc b/regression/cbmc-cpp/Constructor3/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Constructor3/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Constructor4/main.cpp b/regression/cbmc-cpp/Constructor4/main.cpp new file mode 100644 index 00000000000..5fbc797c632 --- /dev/null +++ b/regression/cbmc-cpp/Constructor4/main.cpp @@ -0,0 +1,17 @@ +#include +struct x +{ + int *q; + + x(); +}; + +x::x() : q(0) +{ +} + +int main() +{ + x a; + assert(a.q == 0); +} diff --git a/regression/cbmc-cpp/Constructor4/test.desc b/regression/cbmc-cpp/Constructor4/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Constructor4/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Constructor5/main.cpp b/regression/cbmc-cpp/Constructor5/main.cpp new file mode 100644 index 00000000000..d8f659e95fe --- /dev/null +++ b/regression/cbmc-cpp/Constructor5/main.cpp @@ -0,0 +1,24 @@ +#include +class x +{ +private: + int i; + +public: + x(); + + int get_i() + { + return i; + } +}; + +x::x() : i(1) +{ +} + +int main() +{ + x a; + assert(a.get_i() == 1); +} diff --git a/regression/cbmc-cpp/Constructor5/test.desc b/regression/cbmc-cpp/Constructor5/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Constructor5/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Constructor6/main.cpp b/regression/cbmc-cpp/Constructor6/main.cpp new file mode 100644 index 00000000000..6061e542a37 --- /dev/null +++ b/regression/cbmc-cpp/Constructor6/main.cpp @@ -0,0 +1,24 @@ +#include +int counter = 1; + +struct T +{ + int z; + + T(); +}; + +T::T() +{ + z = counter; + counter++; +} + +T a, b; + +int main() +{ + assert(counter == 3); + assert(a.z == 1); + assert(b.z == 2); +} diff --git a/regression/cbmc-cpp/Constructor6/test.desc b/regression/cbmc-cpp/Constructor6/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Constructor6/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Constructor9/main.cpp b/regression/cbmc-cpp/Constructor9/main.cpp new file mode 100644 index 00000000000..d0615869165 --- /dev/null +++ b/regression/cbmc-cpp/Constructor9/main.cpp @@ -0,0 +1,38 @@ +#include +// Default Initialization of arrays +class B +{ +public: + int i; + + B() : i(1) + { + } +}; + +class A +{ +public: + B b_array[2]; + A() + { + } +}; + +B static_b_array[2]; + +int main() +{ + assert(static_b_array[0].i == 1); + assert(static_b_array[1].i == 1); + + A a; + + assert(a.b_array[0].i == 1); + assert(a.b_array[1].i == 1); + + B b_array[2]; + + assert(b_array[0].i == 1); + assert(b_array[1].i == 1); +} diff --git a/regression/cbmc-cpp/Constructor9/test.desc b/regression/cbmc-cpp/Constructor9/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Constructor9/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Conversion1/main.cpp b/regression/cbmc-cpp/Conversion1/main.cpp new file mode 100644 index 00000000000..f3f9f2b033d --- /dev/null +++ b/regression/cbmc-cpp/Conversion1/main.cpp @@ -0,0 +1,24 @@ +class T +{ +public: + T() : x(0) + { + } + + T(int i, int j) : x(i) + { + } + + int x; +}; + +int main() +{ + // alternate forms of conversion + assert(unsigned(-1) == (unsigned)-1); + + assert(bool(10)); + + T t = T(2, 3); + assert(t.x == 2); +} diff --git a/regression/cpp-from-CVS/Conversion4/test.desc b/regression/cbmc-cpp/Conversion1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Conversion4/test.desc rename to regression/cbmc-cpp/Conversion1/test.desc diff --git a/regression/cbmc-cpp/Conversion10/main.cpp b/regression/cbmc-cpp/Conversion10/main.cpp new file mode 100644 index 00000000000..0d6561a7bbb --- /dev/null +++ b/regression/cbmc-cpp/Conversion10/main.cpp @@ -0,0 +1,20 @@ +struct A +{ +}; + +struct B +{ + explicit B(A &) + { + } +}; + +void test(const B &b) +{ +} + +int main() +{ + A a; + test(a); // conversion error +} diff --git a/regression/cpp-from-CVS/Conversion10/test.desc b/regression/cbmc-cpp/Conversion10/test.desc similarity index 100% rename from regression/cpp-from-CVS/Conversion10/test.desc rename to regression/cbmc-cpp/Conversion10/test.desc diff --git a/regression/cbmc-cpp/Conversion11/main.cpp b/regression/cbmc-cpp/Conversion11/main.cpp new file mode 100644 index 00000000000..938a4bb2c84 --- /dev/null +++ b/regression/cbmc-cpp/Conversion11/main.cpp @@ -0,0 +1,4 @@ +char *func() +{ + return (void *)0; +} diff --git a/regression/cpp-from-CVS/Conversion11/test.desc b/regression/cbmc-cpp/Conversion11/test.desc similarity index 100% rename from regression/cpp-from-CVS/Conversion11/test.desc rename to regression/cbmc-cpp/Conversion11/test.desc diff --git a/regression/cbmc-cpp/Conversion3/main.cpp b/regression/cbmc-cpp/Conversion3/main.cpp new file mode 100644 index 00000000000..bab1f803c83 --- /dev/null +++ b/regression/cbmc-cpp/Conversion3/main.cpp @@ -0,0 +1,6 @@ +int main() +{ + char c = 'c'; + int &i = c; // ill-formed + i++; +} diff --git a/regression/cpp-from-CVS/Conversion3/test.desc b/regression/cbmc-cpp/Conversion3/test.desc similarity index 100% rename from regression/cpp-from-CVS/Conversion3/test.desc rename to regression/cbmc-cpp/Conversion3/test.desc diff --git a/regression/cpp-from-CVS/Conversion4/main.cpp b/regression/cbmc-cpp/Conversion4/main.cpp similarity index 100% rename from regression/cpp-from-CVS/Conversion4/main.cpp rename to regression/cbmc-cpp/Conversion4/main.cpp diff --git a/regression/cpp-from-CVS/Conversion9/test.desc b/regression/cbmc-cpp/Conversion4/test.desc similarity index 100% rename from regression/cpp-from-CVS/Conversion9/test.desc rename to regression/cbmc-cpp/Conversion4/test.desc diff --git a/regression/cbmc-cpp/Conversion5/main.cpp b/regression/cbmc-cpp/Conversion5/main.cpp new file mode 100644 index 00000000000..70b14541a44 --- /dev/null +++ b/regression/cbmc-cpp/Conversion5/main.cpp @@ -0,0 +1,8 @@ +#include +int main() +{ + unsigned i = 1; + unsigned j; + j = i + 1; + assert(j == 2); +} diff --git a/regression/cbmc-cpp/Conversion5/test.desc b/regression/cbmc-cpp/Conversion5/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Conversion5/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Conversion6/main.cpp b/regression/cbmc-cpp/Conversion6/main.cpp new file mode 100644 index 00000000000..51b52a1398d --- /dev/null +++ b/regression/cbmc-cpp/Conversion6/main.cpp @@ -0,0 +1,27 @@ +#include +struct A +{ + int i; +}; + +struct B : public A +{ + int j; +}; + +int func(A a) +{ + return a.i; +} + +int main() +{ + B b; + b.i = 1; + + assert((*((A *)&b)).i == 1); // This works fine. + + int bi = func(*((A *)&b)); // Satabs Ok. + // cbmc error + assert(bi == 1); +} diff --git a/regression/cbmc-cpp/Conversion6/test.desc b/regression/cbmc-cpp/Conversion6/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Conversion6/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Conversion7/main.cpp b/regression/cbmc-cpp/Conversion7/main.cpp new file mode 100644 index 00000000000..943443985d4 --- /dev/null +++ b/regression/cbmc-cpp/Conversion7/main.cpp @@ -0,0 +1,17 @@ +struct A +{ + int i; +}; + +struct B : public A +{ +}; + +int main() +{ + B b; + b.i = 4; + + A(b).i++; // Not a lvalue? + assert(b.i == 4); +} diff --git a/regression/cpp-from-CVS/Conversion7/test.desc b/regression/cbmc-cpp/Conversion7/test.desc similarity index 100% rename from regression/cpp-from-CVS/Conversion7/test.desc rename to regression/cbmc-cpp/Conversion7/test.desc diff --git a/regression/cbmc-cpp/Conversion8/main.cpp b/regression/cbmc-cpp/Conversion8/main.cpp new file mode 100644 index 00000000000..7c49c3b1fe9 --- /dev/null +++ b/regression/cbmc-cpp/Conversion8/main.cpp @@ -0,0 +1,9 @@ +int main() +{ + const char c[1] = {'c'}; + char *pc; + const char **pcc = &pc; // 1: not allowed + *pcc = &c; + *pc = 'C'; // 2: modifies a const object + assert(c[0] == 'c'); +} diff --git a/regression/cpp-from-CVS/Conversion8/test.desc b/regression/cbmc-cpp/Conversion8/test.desc similarity index 100% rename from regression/cpp-from-CVS/Conversion8/test.desc rename to regression/cbmc-cpp/Conversion8/test.desc diff --git a/regression/cbmc-cpp/Conversion9/main.cpp b/regression/cbmc-cpp/Conversion9/main.cpp new file mode 100644 index 00000000000..9455bdb8367 --- /dev/null +++ b/regression/cbmc-cpp/Conversion9/main.cpp @@ -0,0 +1,12 @@ +struct A +{ +}; + +struct B : A +{ +}; + +int main() +{ + A a = B(); +} diff --git a/regression/cpp-from-CVS/Conversion_Operator1/test.desc b/regression/cbmc-cpp/Conversion9/test.desc similarity index 100% rename from regression/cpp-from-CVS/Conversion_Operator1/test.desc rename to regression/cbmc-cpp/Conversion9/test.desc diff --git a/regression/cbmc-cpp/Conversion_Operator1/main.cpp b/regression/cbmc-cpp/Conversion_Operator1/main.cpp new file mode 100644 index 00000000000..a2fb0936289 --- /dev/null +++ b/regression/cbmc-cpp/Conversion_Operator1/main.cpp @@ -0,0 +1,40 @@ +struct Char +{ + char c; + Char(char c) : c(c) + { + } +}; + +struct Int +{ + int i; + operator int &(); + Int(int i) : i(i) + { + } +}; + +Int::operator int &() +{ + return i; +} + +int main() +{ + Int I1(1); + int i1 = int(I1); + assert(i1 == 1); + + Int I2(2); + int i2 = (int &)I2; + assert(i2 == 2); + + Int I3(3); + int i3 = 0; + i3 = I3; + assert(i3 == 3); + + Char C3(I3); + assert(C3.c == 3); +} diff --git a/regression/cpp-from-CVS/Conversion_Operator5/test.desc b/regression/cbmc-cpp/Conversion_Operator1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Conversion_Operator5/test.desc rename to regression/cbmc-cpp/Conversion_Operator1/test.desc diff --git a/regression/cbmc-cpp/Conversion_Operator2/main.cpp b/regression/cbmc-cpp/Conversion_Operator2/main.cpp new file mode 100644 index 00000000000..593c7caf135 --- /dev/null +++ b/regression/cbmc-cpp/Conversion_Operator2/main.cpp @@ -0,0 +1,29 @@ +#include +struct B +{ + int i; +}; + +struct A +{ + B b; + A(int i) + { + b.i = i; + } + operator B &() + { + return b; + } +}; + +int get_i(const B &b) +{ + return b.i; +} + +int main() +{ + A a(10); + assert(get_i(a) == 10); +} diff --git a/regression/cbmc-cpp/Conversion_Operator2/test.desc b/regression/cbmc-cpp/Conversion_Operator2/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Conversion_Operator2/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Conversion_Operator3/main.cpp b/regression/cbmc-cpp/Conversion_Operator3/main.cpp new file mode 100644 index 00000000000..af276128233 --- /dev/null +++ b/regression/cbmc-cpp/Conversion_Operator3/main.cpp @@ -0,0 +1,25 @@ +#include +struct A +{ + int i; +}; + +struct B +{ + int i; + operator A() + { + A tmp; + tmp.i = i++; + return tmp; + } +}; + +int main() +{ + B b; + b.i = 1; + A a = b; + assert(a.i == 1); + assert(b.i == 2); +} diff --git a/regression/cbmc-cpp/Conversion_Operator3/test.desc b/regression/cbmc-cpp/Conversion_Operator3/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Conversion_Operator3/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Conversion_Operator4/main.cpp b/regression/cbmc-cpp/Conversion_Operator4/main.cpp new file mode 100644 index 00000000000..98a02302afd --- /dev/null +++ b/regression/cbmc-cpp/Conversion_Operator4/main.cpp @@ -0,0 +1,15 @@ +#include +struct A +{ + static const int *const i = 0; + operator const int *const() const + { + return i; + } +}; + +int main() +{ + A a; + assert((const int *const)a == A::i); +} diff --git a/regression/cbmc-cpp/Conversion_Operator4/test.desc b/regression/cbmc-cpp/Conversion_Operator4/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Conversion_Operator4/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Conversion_Operator5/main.cpp b/regression/cbmc-cpp/Conversion_Operator5/main.cpp new file mode 100644 index 00000000000..c7d6a57d8c6 --- /dev/null +++ b/regression/cbmc-cpp/Conversion_Operator5/main.cpp @@ -0,0 +1,26 @@ +struct B +{ + int i; + bool operator==(int b) + { + return i == b; + } +}; + +struct A +{ + int i; + operator B() const + { + B b; + b.i = i; + return b; + } +}; + +int main() +{ + A a; + a.i = 10; + assert(a.operator B() == 10); +} diff --git a/regression/cpp-from-CVS/Copy_Constructor1/test.desc b/regression/cbmc-cpp/Conversion_Operator5/test.desc similarity index 100% rename from regression/cpp-from-CVS/Copy_Constructor1/test.desc rename to regression/cbmc-cpp/Conversion_Operator5/test.desc diff --git a/regression/cbmc-cpp/Copy_Constructor1/main.cpp b/regression/cbmc-cpp/Copy_Constructor1/main.cpp new file mode 100644 index 00000000000..01f8a015118 --- /dev/null +++ b/regression/cbmc-cpp/Copy_Constructor1/main.cpp @@ -0,0 +1,31 @@ +class A +{ +public: + A() : i(0) + { + } + virtual int inc() + { + return ++i; + } + int i; +}; + +class B : public A +{ +public: + int inc() + { + return i += 2; + } +}; + +int main() +{ + B b; + int c = b.inc(); + assert(c == 2); + A a = b; + c = a.inc(); + assert(c == 3); +} diff --git a/regression/cpp-from-CVS/Copy_Constructor2/test.desc b/regression/cbmc-cpp/Copy_Constructor1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Copy_Constructor2/test.desc rename to regression/cbmc-cpp/Copy_Constructor1/test.desc diff --git a/regression/cbmc-cpp/Copy_Constructor2/main.cpp b/regression/cbmc-cpp/Copy_Constructor2/main.cpp new file mode 100644 index 00000000000..f291ed6054b --- /dev/null +++ b/regression/cbmc-cpp/Copy_Constructor2/main.cpp @@ -0,0 +1,37 @@ +class A +{ +public: + A() : i(0) + { + } + virtual int inc() + { + return ++i; + } + int i; +}; + +class B : public A +{ +public: + int inc() + { + return i += 2; + } +}; + +int inc(A a) +{ + return a.inc(); +} + +int main() +{ + B b; + + int c = b.inc(); + assert(c == 2); + + c = inc((A)b); + assert(c == 3); +} diff --git a/regression/cpp-from-CVS/Copy_Constructor3/test.desc b/regression/cbmc-cpp/Copy_Constructor2/test.desc similarity index 100% rename from regression/cpp-from-CVS/Copy_Constructor3/test.desc rename to regression/cbmc-cpp/Copy_Constructor2/test.desc diff --git a/regression/cbmc-cpp/Copy_Constructor3/main.cpp b/regression/cbmc-cpp/Copy_Constructor3/main.cpp new file mode 100644 index 00000000000..00797b7c153 --- /dev/null +++ b/regression/cbmc-cpp/Copy_Constructor3/main.cpp @@ -0,0 +1,31 @@ +class A +{ +public: + int ar[2]; + A() + { + ar[0] = 0; + ar[1] = 1; + } +}; + +class B +{ +public: + A as[2]; +}; + +int main() +{ + B b1; + b1.as[0].ar[0] += 1; + b1.as[0].ar[1] += 1; + b1.as[1].ar[0] += 2; + b1.as[1].ar[1] += 2; + + B b2(b1); + assert(b2.as[0].ar[0] == 1); + assert(b2.as[0].ar[1] == 2); + assert(b2.as[1].ar[0] == 2); + assert(b2.as[1].ar[1] == 3); +} diff --git a/regression/cpp-from-CVS/Copy_Constructor5/test.desc b/regression/cbmc-cpp/Copy_Constructor3/test.desc similarity index 100% rename from regression/cpp-from-CVS/Copy_Constructor5/test.desc rename to regression/cbmc-cpp/Copy_Constructor3/test.desc diff --git a/regression/cbmc-cpp/Copy_Constructor5/main.cpp b/regression/cbmc-cpp/Copy_Constructor5/main.cpp new file mode 100644 index 00000000000..c6cf81409ab --- /dev/null +++ b/regression/cbmc-cpp/Copy_Constructor5/main.cpp @@ -0,0 +1,24 @@ +struct A +{ + int i; +}; + +struct B : public A +{ + int j; + B() : j(0) + { + } +}; + +int main() +{ + B b1; + b1.i = 10; + b1.j = 20; + + B b2(b1); + + assert(b2.i == 10); + assert(b2.j == 20); +} diff --git a/regression/cpp-from-CVS/Copy_Operator1/test.desc b/regression/cbmc-cpp/Copy_Constructor5/test.desc similarity index 100% rename from regression/cpp-from-CVS/Copy_Operator1/test.desc rename to regression/cbmc-cpp/Copy_Constructor5/test.desc diff --git a/regression/cbmc-cpp/Copy_Operator1/main.cpp b/regression/cbmc-cpp/Copy_Operator1/main.cpp new file mode 100644 index 00000000000..53054364ce3 --- /dev/null +++ b/regression/cbmc-cpp/Copy_Operator1/main.cpp @@ -0,0 +1,26 @@ +class A +{ +public: + int ar[2]; + A &operator=(const A &ref) + { + ar[0] = ref.ar[1]; + ar[1] = ref.ar[0]; + return *this; + } +}; + +int main() +{ + A a1; + a1.ar[0] = 1; + a1.ar[1] = 2; + + A a2; + a2.ar[0] = 3; + a2.ar[1] = 4; + + a2 = a1; + assert(a2.ar[0] == a1.ar[1]); + assert(a2.ar[1] == a1.ar[0]); +} diff --git a/regression/cpp-from-CVS/Destructor1/test.desc b/regression/cbmc-cpp/Copy_Operator1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Destructor1/test.desc rename to regression/cbmc-cpp/Copy_Operator1/test.desc diff --git a/regression/cbmc-cpp/Copy_Operator2/main.cpp b/regression/cbmc-cpp/Copy_Operator2/main.cpp new file mode 100644 index 00000000000..95ab129a2f7 --- /dev/null +++ b/regression/cbmc-cpp/Copy_Operator2/main.cpp @@ -0,0 +1,13 @@ +class A +{ + const int a; + A() : a(0) + { + } +}; + +int main() +{ + A a, b; + a = b; +} diff --git a/regression/cpp-from-CVS/Copy_Operator2/test.desc b/regression/cbmc-cpp/Copy_Operator2/test.desc similarity index 100% rename from regression/cpp-from-CVS/Copy_Operator2/test.desc rename to regression/cbmc-cpp/Copy_Operator2/test.desc diff --git a/regression/cbmc-cpp/Default_Arguments1/main.cpp b/regression/cbmc-cpp/Default_Arguments1/main.cpp new file mode 100644 index 00000000000..5630267d56b --- /dev/null +++ b/regression/cbmc-cpp/Default_Arguments1/main.cpp @@ -0,0 +1,35 @@ +#include +// #include + +int f(int d = 1) +{ + return d; +} + +int g(int x, int d = 1, int q = 2) +{ + return d; +} + +int global; + +int h(int &r = global) +{ + return r; +} + +void doit() +{ + assert(f() == 1); + assert(f(2) == 2); + assert(g(0) == 1); + assert(g(1, 2) == 2); + + global = 10; + assert(h() == 10); +} + +int main() +{ + doit(); +} diff --git a/regression/cbmc-cpp/Default_Arguments1/test.desc b/regression/cbmc-cpp/Default_Arguments1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Default_Arguments1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Default_Arguments2/main.cpp b/regression/cbmc-cpp/Default_Arguments2/main.cpp new file mode 100644 index 00000000000..5b75d91f726 --- /dev/null +++ b/regression/cbmc-cpp/Default_Arguments2/main.cpp @@ -0,0 +1,11 @@ +#include +int func(int i = 0) +{ + return i; +} + +int main() +{ + int (*pfunc)(int) = func; + assert((*pfunc)(10) == 10); +} diff --git a/regression/cbmc-cpp/Default_Arguments2/test.desc b/regression/cbmc-cpp/Default_Arguments2/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Default_Arguments2/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Destructor1/main.cpp b/regression/cbmc-cpp/Destructor1/main.cpp new file mode 100644 index 00000000000..addc104259f --- /dev/null +++ b/regression/cbmc-cpp/Destructor1/main.cpp @@ -0,0 +1,26 @@ +int g; + +class t1 +{ +public: + t1() + { + g = 1; + } + ~t1() + { + g = 2; + } +}; + +int main() +{ + assert(g == 0); + + { + t1 instance1; + assert(g == 1); + } + + assert(g == 2); +} diff --git a/regression/cpp-from-CVS/Destructor2/test.desc b/regression/cbmc-cpp/Destructor1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Destructor2/test.desc rename to regression/cbmc-cpp/Destructor1/test.desc diff --git a/regression/cbmc-cpp/Destructor2/main.cpp b/regression/cbmc-cpp/Destructor2/main.cpp new file mode 100644 index 00000000000..4eae99fdc1e --- /dev/null +++ b/regression/cbmc-cpp/Destructor2/main.cpp @@ -0,0 +1,30 @@ +int g; + +class t1 +{ +public: + t1() + { + g = 1; + } + ~t1() + { + g = 2; + } +}; + +int main() +{ + assert(g == 0); + + while(true) + { + { + t1 instance1; + assert(g == 1); + break; // leave the loop + } + } + + assert(g == 2); +} diff --git a/regression/cpp-from-CVS/Exception1/test.desc b/regression/cbmc-cpp/Destructor2/test.desc similarity index 100% rename from regression/cpp-from-CVS/Exception1/test.desc rename to regression/cbmc-cpp/Destructor2/test.desc diff --git a/regression/cbmc-cpp/Destructor3/main.cpp b/regression/cbmc-cpp/Destructor3/main.cpp new file mode 100644 index 00000000000..13b6ac7fcfc --- /dev/null +++ b/regression/cbmc-cpp/Destructor3/main.cpp @@ -0,0 +1,18 @@ +class A +{ + int i; + +public: + A() : i(1) + { + } + ~A() + { + i = 0; + } +}; + +int main() +{ + A a; +} diff --git a/regression/cpp-from-CVS/Anonymous_members1/test.desc b/regression/cbmc-cpp/Destructor3/test.desc similarity index 100% rename from regression/cpp-from-CVS/Anonymous_members1/test.desc rename to regression/cbmc-cpp/Destructor3/test.desc diff --git a/regression/cbmc-cpp/Destructor4/main.cpp b/regression/cbmc-cpp/Destructor4/main.cpp new file mode 100644 index 00000000000..498ec0bf8e9 --- /dev/null +++ b/regression/cbmc-cpp/Destructor4/main.cpp @@ -0,0 +1,19 @@ +class A +{ +public: + int i; + A() : i(1) + { + } + ~A(); +}; + +A::~A() +{ + i = -1; +} + +int main() +{ + A a; +} diff --git a/regression/cpp-from-CVS/Array3/test.desc b/regression/cbmc-cpp/Destructor4/test.desc similarity index 100% rename from regression/cpp-from-CVS/Array3/test.desc rename to regression/cbmc-cpp/Destructor4/test.desc diff --git a/regression/cbmc-cpp/Destructor5/main.cpp b/regression/cbmc-cpp/Destructor5/main.cpp new file mode 100644 index 00000000000..64cfb28893a --- /dev/null +++ b/regression/cbmc-cpp/Destructor5/main.cpp @@ -0,0 +1,16 @@ +class X +{ +public: + ~X() + { + } +}; + +int main() +{ + const X *p = new X; + + // this is to work even though p is const, and the destructor + // isn't. + delete p; +} diff --git a/regression/cpp-from-CVS/Assignment1/test.desc b/regression/cbmc-cpp/Destructor5/test.desc similarity index 100% rename from regression/cpp-from-CVS/Assignment1/test.desc rename to regression/cbmc-cpp/Destructor5/test.desc diff --git a/regression/cbmc-cpp/Destructor_with_PtrMember/main.cpp b/regression/cbmc-cpp/Destructor_with_PtrMember/main.cpp new file mode 100644 index 00000000000..7c9a84473b8 --- /dev/null +++ b/regression/cbmc-cpp/Destructor_with_PtrMember/main.cpp @@ -0,0 +1,34 @@ +#include +int global; + +class test_class +{ +public: + ~test_class() + { + global = 1; + } +}; + +int main() +{ + test_class c, *p; + + p = &c; + + p->~test_class(); + + assert(global == 1); + + // The notation for explicit calls to destructors can be used regardless + // of whether the type defines a destructor. This allows you to make such + // explicit calls without knowing if a destructor is defined for the type. + // An explicit call to a destructor where none is defined has no effect. + + typedef char TT; + + TT *q; + q->~TT(); + + return 0; +} diff --git a/regression/cbmc-cpp/Destructor_with_PtrMember/test.desc b/regression/cbmc-cpp/Destructor_with_PtrMember/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Destructor_with_PtrMember/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Exception1/main.cpp b/regression/cbmc-cpp/Exception1/main.cpp new file mode 100644 index 00000000000..e6735cffd6b --- /dev/null +++ b/regression/cbmc-cpp/Exception1/main.cpp @@ -0,0 +1,75 @@ +#include + +class whatnot +{ +public: + whatnot(int _i) : i(_i) + { + } + int i; +}; + +int main() +{ + // example 1 + + try + { + throw(int) 0; + assert(0); + } + + catch(int i) + { + // yes + } + catch(char ch) + { + assert(0); + } + catch(whatnot) + { + assert(0); + } + + // example 2 + + try + { + throw(char) 0; + assert(0); + } + + catch(int i) + { + assert(0); + } + catch(char ch) + { + } + catch(whatnot) + { + assert(0); + } + + // example 3 + + try + { + throw whatnot(1); + assert(0); + } + + catch(int i) + { + assert(0); + } + catch(char ch) + { + assert(0); + } + catch(whatnot w) + { + assert(w.i == 1); + } +} diff --git a/regression/cpp-from-CVS/Friend6/test.desc b/regression/cbmc-cpp/Exception1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Friend6/test.desc rename to regression/cbmc-cpp/Exception1/test.desc diff --git a/regression/cbmc-cpp/Float1/main.cpp b/regression/cbmc-cpp/Float1/main.cpp new file mode 100644 index 00000000000..f822e416948 --- /dev/null +++ b/regression/cbmc-cpp/Float1/main.cpp @@ -0,0 +1,11 @@ +#include +int main(int argc, char *argv[]) +{ + float x = 0.1; + float y = 1.01; + assert(x + y >= 1.1); + + double s = x; + double t = 1; + assert(x + y >= 1.1); +} diff --git a/regression/cbmc-cpp/Float1/test.desc b/regression/cbmc-cpp/Float1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Float1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Friend1/main.cpp b/regression/cbmc-cpp/Friend1/main.cpp new file mode 100644 index 00000000000..92002304cf7 --- /dev/null +++ b/regression/cbmc-cpp/Friend1/main.cpp @@ -0,0 +1,24 @@ +class C +{ +public: + C(int _base) : base(_base) + { + } + + typedef int T; + + friend int f() + { + T x = 1; + return x; + } + + int base; +}; + +int main() +{ + C c(1); + + assert(f() == 1); +} diff --git a/regression/cpp-from-CVS/Function_Arguments3/test.desc b/regression/cbmc-cpp/Friend1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Function_Arguments3/test.desc rename to regression/cbmc-cpp/Friend1/test.desc diff --git a/regression/cbmc-cpp/Friend3/main.cpp b/regression/cbmc-cpp/Friend3/main.cpp new file mode 100644 index 00000000000..5190cd2adf8 --- /dev/null +++ b/regression/cbmc-cpp/Friend3/main.cpp @@ -0,0 +1,23 @@ +class A +{ + friend void inc(A &); + friend int get(const A &a); + int i; +}; + +void inc(A &a) +{ + a.i++; +} +int get(const A &a) +{ + return a.i; +} + +A a; + +int main() +{ + inc(a); + assert(get(a) == 1); +} diff --git a/regression/cpp-from-CVS/Function_Arguments4/test.desc b/regression/cbmc-cpp/Friend3/test.desc similarity index 100% rename from regression/cpp-from-CVS/Function_Arguments4/test.desc rename to regression/cbmc-cpp/Friend3/test.desc diff --git a/regression/cbmc-cpp/Friend4/main.cpp b/regression/cbmc-cpp/Friend4/main.cpp new file mode 100644 index 00000000000..36874706ef3 --- /dev/null +++ b/regression/cbmc-cpp/Friend4/main.cpp @@ -0,0 +1,21 @@ +class A +{ + int i; +}; + +void inc(A &a) +{ + a.i++; +} +int get(const A &a) +{ + return a.i; +} + +A a; + +int main() +{ + inc(a); + assert(get(a) == 1); +} diff --git a/regression/cpp-from-CVS/Friend4/test.desc b/regression/cbmc-cpp/Friend4/test.desc similarity index 100% rename from regression/cpp-from-CVS/Friend4/test.desc rename to regression/cbmc-cpp/Friend4/test.desc diff --git a/regression/cbmc-cpp/Friend5/main.cpp b/regression/cbmc-cpp/Friend5/main.cpp new file mode 100644 index 00000000000..01f859e1287 --- /dev/null +++ b/regression/cbmc-cpp/Friend5/main.cpp @@ -0,0 +1,27 @@ +#include +class A +{ + int i; + friend class B; +}; + +class B +{ +public: + static int get(const A &a) + { + return a.i; + } + + static void set(A &a, int i) + { + a.i = i; + } +}; + +int main() +{ + A a; + B::set(a, 10); + assert(B::get(a) == 10); +} diff --git a/regression/cbmc-cpp/Friend5/test.desc b/regression/cbmc-cpp/Friend5/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Friend5/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Friend6/main.cpp b/regression/cbmc-cpp/Friend6/main.cpp new file mode 100644 index 00000000000..813eb2dee11 --- /dev/null +++ b/regression/cbmc-cpp/Friend6/main.cpp @@ -0,0 +1,31 @@ +class B; + +template +struct A +{ + int get_i(B &b); +}; + +class B +{ + int i; + +public: + B() : i(10) + { + } + friend class A; +}; + +template +int A::get_i(B &b) +{ + return b.i; +} + +int main() +{ + B b; + A a; + assert(a.get_i(b) == 10); +} diff --git a/regression/cpp-from-CVS/Implicit_Conversion2/test.desc b/regression/cbmc-cpp/Friend6/test.desc similarity index 100% rename from regression/cpp-from-CVS/Implicit_Conversion2/test.desc rename to regression/cbmc-cpp/Friend6/test.desc diff --git a/regression/cbmc-cpp/Function_Arguments1/main.cpp b/regression/cbmc-cpp/Function_Arguments1/main.cpp new file mode 100644 index 00000000000..fe97e5f9163 --- /dev/null +++ b/regression/cbmc-cpp/Function_Arguments1/main.cpp @@ -0,0 +1,8 @@ +inline void *memchr(void *__p, int __c, int __n) +{ + __p++; +} + +int main() +{ +} diff --git a/regression/cpp-from-CVS/Class_Members1/test.desc b/regression/cbmc-cpp/Function_Arguments1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Class_Members1/test.desc rename to regression/cbmc-cpp/Function_Arguments1/test.desc diff --git a/regression/cbmc-cpp/Function_Arguments2/main.cpp b/regression/cbmc-cpp/Function_Arguments2/main.cpp new file mode 100644 index 00000000000..1b5d2381a5f --- /dev/null +++ b/regression/cbmc-cpp/Function_Arguments2/main.cpp @@ -0,0 +1,28 @@ +#include +// test default arguments + +int f(int a, int b = 2, int c = 3) +{ + return c; +} + +class X +{ +public: + int g(int a, int b, int c = 3); +}; + +int X::g(int a, int b, int c) +{ + return c; +} + +int main() +{ + assert(f(1, 10, 100) == 100); + assert(f(1, 10) == 3); + assert(f(1) == 3); + + X x; + assert(x.g(1, 2) == 3); +} diff --git a/regression/cbmc-cpp/Function_Arguments2/test.desc b/regression/cbmc-cpp/Function_Arguments2/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Function_Arguments2/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Function_Arguments3/main.cpp b/regression/cbmc-cpp/Function_Arguments3/main.cpp new file mode 100644 index 00000000000..a2078d78969 --- /dev/null +++ b/regression/cbmc-cpp/Function_Arguments3/main.cpp @@ -0,0 +1,34 @@ +#include + +int global; + +// these are in fact the same +void f(const int i) +{ + global = 10; +} + +void f(int i); + +// the following two are *different*! +void g(int *p) +{ + global = 20; +} + +void g(const int *p) +{ + global = 30; +} + +int main() +{ + f(0); + assert(global == 10); + + g((int *)0); + assert(global == 20); + + g((const int *)0); + assert(global == 30); +} diff --git a/regression/cpp-from-CVS/Implicit_Conversion3/test.desc b/regression/cbmc-cpp/Function_Arguments3/test.desc similarity index 100% rename from regression/cpp-from-CVS/Implicit_Conversion3/test.desc rename to regression/cbmc-cpp/Function_Arguments3/test.desc diff --git a/regression/cbmc-cpp/Function_Arguments4/main.cpp b/regression/cbmc-cpp/Function_Arguments4/main.cpp new file mode 100644 index 00000000000..8107531d25a --- /dev/null +++ b/regression/cbmc-cpp/Function_Arguments4/main.cpp @@ -0,0 +1,28 @@ +#include + +int i; + +struct B +{ + B() + { + i++; + } + B(const B &b) + { + i += 10; + } +}; + +B f(B b) +{ + assert(i == 11); + return b; +} + +int main() +{ + B b; + b = f(b); + assert(i == 21); +} diff --git a/regression/cpp-from-CVS/Implicit_Conversion8/test.desc b/regression/cbmc-cpp/Function_Arguments4/test.desc similarity index 100% rename from regression/cpp-from-CVS/Implicit_Conversion8/test.desc rename to regression/cbmc-cpp/Function_Arguments4/test.desc diff --git a/regression/cbmc-cpp/Function_Arguments5/main.cpp b/regression/cbmc-cpp/Function_Arguments5/main.cpp new file mode 100644 index 00000000000..28f41323edc --- /dev/null +++ b/regression/cbmc-cpp/Function_Arguments5/main.cpp @@ -0,0 +1,17 @@ +#include +bool func(const int &i) +{ + return false; +} +bool func(const int *i) +{ + return true; +} + +int main() +{ + int k; + int &rk = k; + assert(!func(rk)); + assert(func(&k)); +} diff --git a/regression/cbmc-cpp/Function_Arguments5/test.desc b/regression/cbmc-cpp/Function_Arguments5/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Function_Arguments5/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Function_Pointer1/main.cpp b/regression/cbmc-cpp/Function_Pointer1/main.cpp new file mode 100644 index 00000000000..c2635df9893 --- /dev/null +++ b/regression/cbmc-cpp/Function_Pointer1/main.cpp @@ -0,0 +1,14 @@ +#include +int f(int x) +{ + assert(x == 1); +} + +int main() +{ + int (*p)(int); + + p = f; + + p(1); +} diff --git a/regression/cbmc-cpp/Function_Pointer1/test.desc b/regression/cbmc-cpp/Function_Pointer1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Function_Pointer1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Implicit_Conversion1/main.cpp b/regression/cbmc-cpp/Implicit_Conversion1/main.cpp new file mode 100644 index 00000000000..01654252b49 --- /dev/null +++ b/regression/cbmc-cpp/Implicit_Conversion1/main.cpp @@ -0,0 +1,22 @@ +#include +struct A +{ + int i; +}; + +struct B : public A +{ + int j; +}; + +int func(A a) +{ + return a.i; +} + +int main() +{ + B b; + b.i = 1; + assert(func(b) == 1); +} diff --git a/regression/cbmc-cpp/Implicit_Conversion1/test.desc b/regression/cbmc-cpp/Implicit_Conversion1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Implicit_Conversion1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Implicit_Conversion2/main.cpp b/regression/cbmc-cpp/Implicit_Conversion2/main.cpp new file mode 100644 index 00000000000..9593ec44867 --- /dev/null +++ b/regression/cbmc-cpp/Implicit_Conversion2/main.cpp @@ -0,0 +1,12 @@ +char func1(const char &c) +{ + return c; +} + +int main() +{ + assert(func1((char)10) == 10); + + int i(20); + assert(func1((char)i) == 20); +} diff --git a/regression/cpp-from-CVS/Inheritance2/test.desc b/regression/cbmc-cpp/Implicit_Conversion2/test.desc similarity index 100% rename from regression/cpp-from-CVS/Inheritance2/test.desc rename to regression/cbmc-cpp/Implicit_Conversion2/test.desc diff --git a/regression/cbmc-cpp/Implicit_Conversion3/main.cpp b/regression/cbmc-cpp/Implicit_Conversion3/main.cpp new file mode 100644 index 00000000000..630502d7077 --- /dev/null +++ b/regression/cbmc-cpp/Implicit_Conversion3/main.cpp @@ -0,0 +1,36 @@ +struct A +{ + int i; + A() : i(0) + { + } + A(int i) : i(i) + { + } +}; + +struct B +{ + int j; + B() : j(0) + { + } + B(int j) : j(j) + { + } + B(const A &a) : j(a.i) + { + } +}; + +B operator+(const B b1, B b2) +{ + return B(b1.j + b2.j); +} + +int main() +{ + A a(10); + B b = a + a; + assert(b.j == 20); +} diff --git a/regression/cpp-from-CVS/Lvalue1/test.desc b/regression/cbmc-cpp/Implicit_Conversion3/test.desc similarity index 100% rename from regression/cpp-from-CVS/Lvalue1/test.desc rename to regression/cbmc-cpp/Implicit_Conversion3/test.desc diff --git a/regression/cbmc-cpp/Implicit_Conversion4/main.cpp b/regression/cbmc-cpp/Implicit_Conversion4/main.cpp new file mode 100644 index 00000000000..daae15d8457 --- /dev/null +++ b/regression/cbmc-cpp/Implicit_Conversion4/main.cpp @@ -0,0 +1,89 @@ +#include +struct B +{ + int j; + B(int j) : j(j) + { + } +}; + +struct A +{ + int i; + A(int i) : i(i) + { + } + A(const B &b) : i(b.j) + { + } +}; + +struct C : public A +{ + C(int i) : A(i) + { + } +}; + +int func1(const A &a) +{ + return a.i; +} + +int func2(A &a) +{ + return a.i; +} + +int func3(A a) +{ + return a.i; +} + +int main() +{ + A a1(10); + assert(func1(a1) == 10); + assert(func2(a1) == 10); + assert(func3(a1) == 10); + + const A a2(20); + assert(func1(a2) == 20); + assert(func3(a2) == 20); + + A &r1 = a1; + assert(func1(r1) == 10); + assert(func2(r1) == 10); + assert(func3(r1) == 10); + + const A &r2 = a1; + assert(func1(r2) == 10); + assert(func3(r2) == 10); + + B b1(30); + assert(func3(b1) == 30); + + B &r3 = b1; + assert(func3(r3) == 30); + + const B &r4 = b1; + assert(func3(r4) == 30); + + C c1(40); + assert(func1(c1) == 40); + assert(func2(c1) == 40); + assert(func3(c1) == 40); + + const C c2(50); + assert(func1(c2) == 50); + assert(func3(c2) == 50); + + C &r5 = c1; + assert(func1(r5) == 40); + assert(func2(r5) == 40); + assert(func3(r5) == 40); + + const C &r6 = c2; + assert(func1(r6) == 50); + assert(func3(r6) == 50); +} diff --git a/regression/cbmc-cpp/Implicit_Conversion4/test.desc b/regression/cbmc-cpp/Implicit_Conversion4/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Implicit_Conversion4/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Implicit_Conversion5/main.cpp b/regression/cbmc-cpp/Implicit_Conversion5/main.cpp new file mode 100644 index 00000000000..52bcd7fc78b --- /dev/null +++ b/regression/cbmc-cpp/Implicit_Conversion5/main.cpp @@ -0,0 +1,7 @@ +void f(int); + +int main() +{ + char *pc; + f(pc); // invalid conversion +} diff --git a/regression/cpp-from-CVS/Implicit_Conversion5/test.desc b/regression/cbmc-cpp/Implicit_Conversion5/test.desc similarity index 100% rename from regression/cpp-from-CVS/Implicit_Conversion5/test.desc rename to regression/cbmc-cpp/Implicit_Conversion5/test.desc diff --git a/regression/cbmc-cpp/Implicit_Conversion6/main.cpp b/regression/cbmc-cpp/Implicit_Conversion6/main.cpp new file mode 100644 index 00000000000..af366dc801a --- /dev/null +++ b/regression/cbmc-cpp/Implicit_Conversion6/main.cpp @@ -0,0 +1,14 @@ +#include +bool f(const char *) +{ + return true; +} +bool f(int) +{ + return false; +} + +int main() +{ + assert(f("hello")); +} diff --git a/regression/cbmc-cpp/Implicit_Conversion6/test.desc b/regression/cbmc-cpp/Implicit_Conversion6/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Implicit_Conversion6/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Implicit_Conversion7/main.cpp b/regression/cbmc-cpp/Implicit_Conversion7/main.cpp new file mode 100644 index 00000000000..f251d0eb52a --- /dev/null +++ b/regression/cbmc-cpp/Implicit_Conversion7/main.cpp @@ -0,0 +1,6 @@ +#include +int main() +{ + int a; + assert(&a); +} diff --git a/regression/cbmc-cpp/Implicit_Conversion7/test.desc b/regression/cbmc-cpp/Implicit_Conversion7/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Implicit_Conversion7/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Implicit_Conversion8/main.cpp b/regression/cbmc-cpp/Implicit_Conversion8/main.cpp new file mode 100644 index 00000000000..ab21294d59f --- /dev/null +++ b/regression/cbmc-cpp/Implicit_Conversion8/main.cpp @@ -0,0 +1,43 @@ +struct Bit +{ + bool b; + Bit(bool b = false) : b(b) + { + } + Bit(const Bit &bit) : b(bit.b) + { + } + + // operator bool() const {return b;} + + Bit &operator=(bool b) + { + this->b = b; + return *this; + } + + Bit &operator=(const Bit &bit) + { + this->b = bit.b; + return *this; + } + + friend const Bit operator~(const Bit &bit) + { + Bit r; + r.b = ~bit.b; + return r; + } + + friend void b_not(Bit &r, const Bit &a) + { + r = (~a); + } +}; + +int main() +{ + Bit b1, b2; + b_not(b1, b2); + assert(b1.b != b2.b); +} diff --git a/regression/cpp-from-CVS/Multiple_Inheritance1/test.desc b/regression/cbmc-cpp/Implicit_Conversion8/test.desc similarity index 100% rename from regression/cpp-from-CVS/Multiple_Inheritance1/test.desc rename to regression/cbmc-cpp/Implicit_Conversion8/test.desc diff --git a/regression/cbmc-cpp/Implicit_Conversion9/main.cpp b/regression/cbmc-cpp/Implicit_Conversion9/main.cpp new file mode 100644 index 00000000000..bfb62ca4f1f --- /dev/null +++ b/regression/cbmc-cpp/Implicit_Conversion9/main.cpp @@ -0,0 +1,18 @@ +enum foo +{ + NOT_AFFECTED, + FATAL_AFFECT, + WARNING +}; + +typedef struct +{ + foo SeverityType; +} BitDatabaseRecordStruct; + +const BitDatabaseRecordStruct BitDataBase[1] = {{NOT_AFFECTED}}; + +int main() +{ + return 0; +} diff --git a/regression/cpp-from-CVS/Comma_Operator1/test.desc b/regression/cbmc-cpp/Implicit_Conversion9/test.desc similarity index 100% rename from regression/cpp-from-CVS/Comma_Operator1/test.desc rename to regression/cbmc-cpp/Implicit_Conversion9/test.desc diff --git a/regression/cbmc-cpp/Inheritance1/main.cpp b/regression/cbmc-cpp/Inheritance1/main.cpp new file mode 100644 index 00000000000..57a62e40f4c --- /dev/null +++ b/regression/cbmc-cpp/Inheritance1/main.cpp @@ -0,0 +1,25 @@ +#include +class b +{ +public: + int x; + + void f(); +}; + +void b::f() +{ + x = 1; +} + +class t : public b +{ +public: +}; + +int main() +{ + t instance; + instance.f(); + assert(instance.x == 1); +} diff --git a/regression/cbmc-cpp/Inheritance1/test.desc b/regression/cbmc-cpp/Inheritance1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Inheritance1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Inheritance2/main.cpp b/regression/cbmc-cpp/Inheritance2/main.cpp new file mode 100644 index 00000000000..a33ff085e2e --- /dev/null +++ b/regression/cbmc-cpp/Inheritance2/main.cpp @@ -0,0 +1,38 @@ +class A +{ +public: + int i; + void f(); +}; + +void A::f() +{ + i = 1; +} + +class B : public A +{ +public: + int i; + void f() + { + i++; + A::i++; + } +}; + +int main() +{ + B b; + b.i = 0; + b.B::i++; + + b.A::i = 10; + + b.f(); + assert(b.i == 2); + assert(b.A::i == 11); + + b.A::f(); + assert(b.A::i == 1); +} diff --git a/regression/cpp-from-CVS/Multiple_Inheritance2/test.desc b/regression/cbmc-cpp/Inheritance2/test.desc similarity index 100% rename from regression/cpp-from-CVS/Multiple_Inheritance2/test.desc rename to regression/cbmc-cpp/Inheritance2/test.desc diff --git a/regression/cbmc-cpp/Inheritance3/main.cpp b/regression/cbmc-cpp/Inheritance3/main.cpp new file mode 100644 index 00000000000..18157ff6dbd --- /dev/null +++ b/regression/cbmc-cpp/Inheritance3/main.cpp @@ -0,0 +1,22 @@ +#include +struct A +{ + typedef int INT; +}; + +struct B : public A +{ + INT i; + void set(INT i) + { + this->i = i; + } +}; + +int main() +{ + B b; + b.i = 0; + b.i++; + assert(b.i == 1); +} diff --git a/regression/cbmc-cpp/Inheritance3/test.desc b/regression/cbmc-cpp/Inheritance3/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Inheritance3/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Inheritance4/main.cpp b/regression/cbmc-cpp/Inheritance4/main.cpp new file mode 100644 index 00000000000..5e35aec632f --- /dev/null +++ b/regression/cbmc-cpp/Inheritance4/main.cpp @@ -0,0 +1,22 @@ +#include +struct A +{ + int x; + A() + { + } +}; + +struct B : public A +{ + B() + { + } +}; + +int main() +{ + B b1, b2; + b1 = b2; + assert(b1.x == b2.x); +} diff --git a/regression/cbmc-cpp/Inheritance4/test.desc b/regression/cbmc-cpp/Inheritance4/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Inheritance4/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Initializer1/main.cpp b/regression/cbmc-cpp/Initializer1/main.cpp new file mode 100644 index 00000000000..80e3fcb8569 --- /dev/null +++ b/regression/cbmc-cpp/Initializer1/main.cpp @@ -0,0 +1,10 @@ +#include + +const char my_string[] = "abc123"; + +int main() +{ + assert(my_string[0] == 'a'); + assert(my_string[6] == 0); + assert(sizeof(my_string) == 7); +} diff --git a/regression/cbmc-cpp/Initializer1/test.desc b/regression/cbmc-cpp/Initializer1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Initializer1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Label0/main.cpp b/regression/cbmc-cpp/Label0/main.cpp new file mode 100644 index 00000000000..6b4369436e1 --- /dev/null +++ b/regression/cbmc-cpp/Label0/main.cpp @@ -0,0 +1,8 @@ +#include +int main() +{ +dummy_label: + int i = 0; + + assert(i == 0); +} diff --git a/regression/cbmc-cpp/Label0/test.desc b/regression/cbmc-cpp/Label0/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Label0/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Linking1/main.cpp b/regression/cbmc-cpp/Linking1/main.cpp new file mode 100644 index 00000000000..b01db464321 --- /dev/null +++ b/regression/cbmc-cpp/Linking1/main.cpp @@ -0,0 +1,14 @@ +#include "module.h" +#include + +extern int i; + +int main() +{ + assert(i == 1); + + T t; + t.f(); + + assert(i == 2); +} diff --git a/regression/cbmc-cpp/Linking1/module.cpp b/regression/cbmc-cpp/Linking1/module.cpp new file mode 100644 index 00000000000..9c14ec6f871 --- /dev/null +++ b/regression/cbmc-cpp/Linking1/module.cpp @@ -0,0 +1,8 @@ +#include "module.h" + +int i = 1; + +void T::f() +{ + i = 2; +} diff --git a/regression/cpp-from-CVS/Linking1/module.h b/regression/cbmc-cpp/Linking1/module.h similarity index 100% rename from regression/cpp-from-CVS/Linking1/module.h rename to regression/cbmc-cpp/Linking1/module.h diff --git a/regression/cbmc-cpp/Linking1/test.desc b/regression/cbmc-cpp/Linking1/test.desc new file mode 100644 index 00000000000..49ced91341b --- /dev/null +++ b/regression/cbmc-cpp/Linking1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp +module.cpp +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cpp-from-CVS/Linking2/test.desc b/regression/cbmc-cpp/Linking2/test.desc similarity index 100% rename from regression/cpp-from-CVS/Linking2/test.desc rename to regression/cbmc-cpp/Linking2/test.desc diff --git a/regression/cbmc-cpp/Linking2/test_link1.cpp b/regression/cbmc-cpp/Linking2/test_link1.cpp new file mode 100644 index 00000000000..2b6a716db19 --- /dev/null +++ b/regression/cbmc-cpp/Linking2/test_link1.cpp @@ -0,0 +1,12 @@ +#include + +extern int x; +extern int f(void); + +int main() +{ + int z; + + x = z; + assert(f() == z); +} diff --git a/regression/cpp-from-CVS/Linking2/test_link2.c b/regression/cbmc-cpp/Linking2/test_link2.c similarity index 100% rename from regression/cpp-from-CVS/Linking2/test_link2.c rename to regression/cbmc-cpp/Linking2/test_link2.c diff --git a/regression/cbmc-cpp/Member_Access_in_Class/main.cpp b/regression/cbmc-cpp/Member_Access_in_Class/main.cpp new file mode 100644 index 00000000000..45daa99eaed --- /dev/null +++ b/regression/cbmc-cpp/Member_Access_in_Class/main.cpp @@ -0,0 +1,23 @@ +#include +class t +{ +public: + void f() + { + i = 1; + } + + void g() + { + f(); + } + + int i; +}; + +int main() +{ + t instance; + instance.g(); + assert(instance.i == 1); +} diff --git a/regression/cbmc-cpp/Member_Access_in_Class/test.desc b/regression/cbmc-cpp/Member_Access_in_Class/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Member_Access_in_Class/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Multiple_Inheritance1/main.cpp b/regression/cbmc-cpp/Multiple_Inheritance1/main.cpp new file mode 100644 index 00000000000..932eb983200 --- /dev/null +++ b/regression/cbmc-cpp/Multiple_Inheritance1/main.cpp @@ -0,0 +1,25 @@ +struct A +{ + int i; +}; + +struct B +{ + int j; + void setJ(int j) + { + this->j = j; + } +}; + +struct C : A, B +{ + int k; +}; + +int main() +{ + C c; + c.setJ(10); + assert(c.j == 10); +} diff --git a/regression/cpp-from-CVS/Multiple_Inheritance4/test.desc b/regression/cbmc-cpp/Multiple_Inheritance1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Multiple_Inheritance4/test.desc rename to regression/cbmc-cpp/Multiple_Inheritance1/test.desc diff --git a/regression/cbmc-cpp/Multiple_Inheritance2/main.cpp b/regression/cbmc-cpp/Multiple_Inheritance2/main.cpp new file mode 100644 index 00000000000..f5e853f2308 --- /dev/null +++ b/regression/cbmc-cpp/Multiple_Inheritance2/main.cpp @@ -0,0 +1,21 @@ +struct A +{ + int i; + A(){}; +}; +struct B : virtual A +{ +}; +struct C : virtual A +{ +}; +struct D : B, C +{ +}; + +int main() +{ + D d; + d.i = 10; + assert(d.i == 10); +} diff --git a/regression/cpp-from-CVS/Overloading_Functions2/test.desc b/regression/cbmc-cpp/Multiple_Inheritance2/test.desc similarity index 100% rename from regression/cpp-from-CVS/Overloading_Functions2/test.desc rename to regression/cbmc-cpp/Multiple_Inheritance2/test.desc diff --git a/regression/cbmc-cpp/Multiple_Inheritance3/main.cpp b/regression/cbmc-cpp/Multiple_Inheritance3/main.cpp new file mode 100644 index 00000000000..ccded0ca162 --- /dev/null +++ b/regression/cbmc-cpp/Multiple_Inheritance3/main.cpp @@ -0,0 +1,13 @@ +struct A +{ + int i; +}; +struct B : A +{ +}; +struct C : A +{ +}; +struct D : virtual B, virtual C +{ +}; // we do not allow this diff --git a/regression/cpp-from-CVS/Multiple_Inheritance3/test.desc b/regression/cbmc-cpp/Multiple_Inheritance3/test.desc similarity index 100% rename from regression/cpp-from-CVS/Multiple_Inheritance3/test.desc rename to regression/cbmc-cpp/Multiple_Inheritance3/test.desc diff --git a/regression/cbmc-cpp/Multiple_Inheritance4/main.cpp b/regression/cbmc-cpp/Multiple_Inheritance4/main.cpp new file mode 100644 index 00000000000..90bd87f25d3 --- /dev/null +++ b/regression/cbmc-cpp/Multiple_Inheritance4/main.cpp @@ -0,0 +1,35 @@ +struct ostream +{ + ostream(int id) : id(id) + { + } + ostream(const ostream &); // disabled + ostream &operator=(const ostream &); // disabled + int id; +}; + +struct istream +{ + istream(int id) : id(id) + { + } + istream(const istream &); // disabled + istream &operator=(const istream &); // disabled + int id; +}; + +struct iostream : ostream, istream +{ + iostream(int id) : ostream(id), istream(id) + { + } + iostream(const iostream &); // disabled + iostream &operator=(const iostream &); // disabled +}; + +int main() +{ + iostream io(1); + assert(io.ostream::id == 1); + assert(io.istream::id == 1); +} diff --git a/regression/cpp-from-CVS/Overloading_Operators1/test.desc b/regression/cbmc-cpp/Multiple_Inheritance4/test.desc similarity index 100% rename from regression/cpp-from-CVS/Overloading_Operators1/test.desc rename to regression/cbmc-cpp/Multiple_Inheritance4/test.desc diff --git a/regression/cbmc-cpp/Mutable1/main.cpp b/regression/cbmc-cpp/Mutable1/main.cpp new file mode 100644 index 00000000000..7808189b92e --- /dev/null +++ b/regression/cbmc-cpp/Mutable1/main.cpp @@ -0,0 +1,16 @@ +#include +struct A +{ + mutable int i; + void set(int v) const + { + i = v; + } +}; + +int main() +{ + const A a; + a.set(99); + assert(a.i == 99); +} diff --git a/regression/cbmc-cpp/Mutable1/test.desc b/regression/cbmc-cpp/Mutable1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Mutable1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Overloading_Functions1/main.cpp b/regression/cbmc-cpp/Overloading_Functions1/main.cpp new file mode 100644 index 00000000000..5fcf66463e8 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Functions1/main.cpp @@ -0,0 +1,47 @@ +#include +// get closest match + +struct T +{ +public: + T() : x(0) + { + } + + int x; +}; + +int f(int i) +{ + return 1; +} +int f(const int *p) +{ + return 2; +} +int f(char i) +{ + return 3; +} +int f(struct T &t) +{ + return 4; +} +int f(const struct T &t) +{ + return 5; +} + +int main() +{ + int i; + char ch; + T t; + const T const_t; + + assert(f(i) == 1); + assert(f(&i) == 2); + assert(f(ch) == 3); + assert(f(t) == 4); + assert(f(const_t) == 5); +} diff --git a/regression/cbmc-cpp/Overloading_Functions1/test.desc b/regression/cbmc-cpp/Overloading_Functions1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Functions1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Overloading_Functions2/main.cpp b/regression/cbmc-cpp/Overloading_Functions2/main.cpp new file mode 100644 index 00000000000..ef690afe7ce --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Functions2/main.cpp @@ -0,0 +1,26 @@ +struct A +{ +}; + +struct B : A +{ +}; + +struct C : B +{ +}; + +bool f1(A &) +{ + return true; +} +bool f1(B &) +{ + return false; +} + +int main() +{ + C c; + assert(f1(c) == false); +} diff --git a/regression/cpp-from-CVS/Overloading_Operators10/test.desc b/regression/cbmc-cpp/Overloading_Functions2/test.desc similarity index 100% rename from regression/cpp-from-CVS/Overloading_Operators10/test.desc rename to regression/cbmc-cpp/Overloading_Functions2/test.desc diff --git a/regression/cbmc-cpp/Overloading_Functions3/main.cpp b/regression/cbmc-cpp/Overloading_Functions3/main.cpp new file mode 100644 index 00000000000..3ba0878f671 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Functions3/main.cpp @@ -0,0 +1,69 @@ +#include + +// these are _different_ + +int f(char) +{ + return 1; +} + +int f(unsigned char) +{ + return 2; +} + +int f(short int) +{ + return 3; +} + +int f(int) +{ + return 4; +} + +int f(unsigned int) +{ + return 5; +} + +int f(long int) +{ + return 6; +} + +// not the same as long int +int f(long long) +{ + return 7; +} + +int f(float) +{ + return 8; +} + +int f(double) +{ + return 9; +} + +// not the same as double! +int f(long double) +{ + return 10; +} + +int main() +{ + assert(f((char)0) == 1); + assert(f((unsigned char)0) == 2); + assert(f((short int)0) == 3); + assert(f((int)0) == 4); + assert(f((unsigned int)0) == 5); + assert(f((long int)0) == 6); + assert(f((long long)0) == 7); + assert(f((float)0) == 8); + assert(f((double)0) == 9); + assert(f((long double)0) == 10); +} diff --git a/regression/cbmc-cpp/Overloading_Functions3/test.desc b/regression/cbmc-cpp/Overloading_Functions3/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Functions3/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Overloading_Functions4/main.cpp b/regression/cbmc-cpp/Overloading_Functions4/main.cpp new file mode 100644 index 00000000000..c63d368170b --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Functions4/main.cpp @@ -0,0 +1,13 @@ +double pow(double _X, double _Y); +double pow(double _X, int _Y); +float pow(float _X, float _Y); +float pow(float _X, int _Y); +long double pow(long double _X, long double _Y); +long double pow(long double _X, int _Y); + +int main() +{ + double x; + // the literal types select the function + x = pow(2.0f, 3); +} diff --git a/regression/cpp-from-CVS/ConditionalExpression1/test.desc b/regression/cbmc-cpp/Overloading_Functions4/test.desc similarity index 100% rename from regression/cpp-from-CVS/ConditionalExpression1/test.desc rename to regression/cbmc-cpp/Overloading_Functions4/test.desc diff --git a/regression/cbmc-cpp/Overloading_Increment1/main.cpp b/regression/cbmc-cpp/Overloading_Increment1/main.cpp new file mode 100644 index 00000000000..e38a2599120 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Increment1/main.cpp @@ -0,0 +1,44 @@ +#include +struct A +{ + int a; + A operator++(int zero) + { + A obj(*this); + a++; + return obj; + } + + A &operator++() + { + a++; + return *this; + } + + A operator--(int zero) + { + A obj(*this); + a--; + return obj; + } + + A &operator--() + { + a--; + return *this; + } +}; + +int main() +{ + A obj; + obj.a = 0; + A obj2 = obj++; + assert(obj2.a == 0 && obj.a == 1); + obj2 = ++obj; + assert(obj2.a == 2 && obj.a == 2); + obj2 = obj--; + assert(obj2.a == 2 && obj.a == 1); + obj2 = --obj; + assert(obj2.a == 0 && obj.a == 0); +} diff --git a/regression/cbmc-cpp/Overloading_Increment1/test.desc b/regression/cbmc-cpp/Overloading_Increment1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Increment1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Overloading_Members1/main.cpp b/regression/cbmc-cpp/Overloading_Members1/main.cpp new file mode 100644 index 00000000000..fd9645dca77 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Members1/main.cpp @@ -0,0 +1,23 @@ +#include +class T +{ +public: + int f() const + { + return 1; + } + + int f() + { + return 2; + } +}; + +int main() +{ + T x; + const T x_const; + + assert(x_const.f() == 1); + assert(x.f() == 2); +} diff --git a/regression/cbmc-cpp/Overloading_Members1/test.desc b/regression/cbmc-cpp/Overloading_Members1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Members1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Overloading_Operators1/main.cpp b/regression/cbmc-cpp/Overloading_Operators1/main.cpp new file mode 100644 index 00000000000..ad6a7b193d0 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators1/main.cpp @@ -0,0 +1,27 @@ +class T +{ +public: +}; + +int operator+(T a, int b) +{ + return b; +} + +int operator-(T a, int b) +{ + return -b; +} + +int main() +{ + T x; + + int temp; + + temp = x + 2; + assert(temp == 2); + + temp = x - 3; + assert(temp == -3); +} diff --git a/regression/cpp-from-CVS/Overloading_Operators11/test.desc b/regression/cbmc-cpp/Overloading_Operators1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Overloading_Operators11/test.desc rename to regression/cbmc-cpp/Overloading_Operators1/test.desc diff --git a/regression/cbmc-cpp/Overloading_Operators10/main.cpp b/regression/cbmc-cpp/Overloading_Operators10/main.cpp new file mode 100644 index 00000000000..8d51cb64d64 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators10/main.cpp @@ -0,0 +1,31 @@ +struct A +{ + bool True() + { + return true; + } +}; + +struct B +{ + A a; + A *operator->() + { + return &a; + } +}; + +struct C +{ + B b; + B &operator->() + { + return b; + } +}; + +int main() +{ + C c; + assert(c->True()); +} diff --git a/regression/cpp-from-CVS/Overloading_Operators14/test.desc b/regression/cbmc-cpp/Overloading_Operators10/test.desc similarity index 100% rename from regression/cpp-from-CVS/Overloading_Operators14/test.desc rename to regression/cbmc-cpp/Overloading_Operators10/test.desc diff --git a/regression/cbmc-cpp/Overloading_Operators11/main.cpp b/regression/cbmc-cpp/Overloading_Operators11/main.cpp new file mode 100644 index 00000000000..58c8e6c4e4c --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators11/main.cpp @@ -0,0 +1,34 @@ +struct C +{ + bool b; + C(bool b) : b(b) + { + } +}; + +struct A +{ + C c1; + + A() : c1(false) + { + } + const C *operator->() const + { + return &c1; + } +}; + +struct B : A +{ + bool func() const + { + return (*this)->b; + } +}; + +int main() +{ + const B b1; + assert(b1.func() == false); +} diff --git a/regression/cpp-from-CVS/Overloading_Operators4/test.desc b/regression/cbmc-cpp/Overloading_Operators11/test.desc similarity index 100% rename from regression/cpp-from-CVS/Overloading_Operators4/test.desc rename to regression/cbmc-cpp/Overloading_Operators11/test.desc diff --git a/regression/cbmc-cpp/Overloading_Operators12/main.cpp b/regression/cbmc-cpp/Overloading_Operators12/main.cpp new file mode 100644 index 00000000000..e0371704731 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators12/main.cpp @@ -0,0 +1,18 @@ +#include +struct A +{ + bool operator<<(const A &) const + { + return true; + } + bool func(const A &a) const + { + return operator<<(a); + } +}; + +int main() +{ + A a; + assert(a.func(a) == true); +} diff --git a/regression/cbmc-cpp/Overloading_Operators12/test.desc b/regression/cbmc-cpp/Overloading_Operators12/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators12/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Overloading_Operators13/main.cpp b/regression/cbmc-cpp/Overloading_Operators13/main.cpp new file mode 100644 index 00000000000..1301b47e189 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators13/main.cpp @@ -0,0 +1,27 @@ +#include +struct A +{ + bool operator[](int index) + { + return true; + } +}; + +struct B +{ + A a; + bool operator[](int index) + { + return false; + } + bool func() + { + return a[0]; + } +}; + +int main() +{ + B b; + assert(b.func() == true); +} diff --git a/regression/cbmc-cpp/Overloading_Operators13/test.desc b/regression/cbmc-cpp/Overloading_Operators13/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators13/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Overloading_Operators14/main.cpp b/regression/cbmc-cpp/Overloading_Operators14/main.cpp new file mode 100644 index 00000000000..8305244bd2a --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators14/main.cpp @@ -0,0 +1,20 @@ +struct A +{ + typedef int INT; + int i; + operator INT() + { + return i; + } + INT value() + { + return operator INT(); + } +}; + +int main() +{ + A a; + a.i = 20; + assert(a.value() == 20); +} diff --git a/regression/cpp-from-CVS/Overloading_Operators5/test.desc b/regression/cbmc-cpp/Overloading_Operators14/test.desc similarity index 100% rename from regression/cpp-from-CVS/Overloading_Operators5/test.desc rename to regression/cbmc-cpp/Overloading_Operators14/test.desc diff --git a/regression/cbmc-cpp/Overloading_Operators16/main.cpp b/regression/cbmc-cpp/Overloading_Operators16/main.cpp new file mode 100644 index 00000000000..0b02e3fbafe --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators16/main.cpp @@ -0,0 +1,25 @@ +class module_name +{ +public: + operator const char *(); + operator int(); + operator char(); + operator long long(); + operator unsigned int(); + operator bool(); +}; + +void f(module_name name) +{ + (const char *)name; + name.operator const char *(); + name.operator int(); + name.operator char(); + name.operator bool(); + name.operator unsigned int(); + name.operator long long(); +} + +int main(int argc, char *argv[]) +{ +} diff --git a/regression/cpp-from-CVS/Overloading_Operators16/test.desc b/regression/cbmc-cpp/Overloading_Operators16/test.desc similarity index 100% rename from regression/cpp-from-CVS/Overloading_Operators16/test.desc rename to regression/cbmc-cpp/Overloading_Operators16/test.desc diff --git a/regression/cbmc-cpp/Overloading_Operators2/main.cpp b/regression/cbmc-cpp/Overloading_Operators2/main.cpp new file mode 100644 index 00000000000..62bc7107ab2 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators2/main.cpp @@ -0,0 +1,28 @@ +#include +class C +{ +public: + C(int _base) : base(_base) + { + } + + int operator[](int x) + { + return base + x; + } + + int operator[](class Z &z) + { + return 0; + } + + int base; +}; + +int main() +{ + C c(1); + + assert(c[0] == 1); + assert(c[2] == 3); +} diff --git a/regression/cbmc-cpp/Overloading_Operators2/test.desc b/regression/cbmc-cpp/Overloading_Operators2/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators2/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cpp-from-CVS/Overloading_Operators3/main.cpp b/regression/cbmc-cpp/Overloading_Operators3/main.cpp similarity index 100% rename from regression/cpp-from-CVS/Overloading_Operators3/main.cpp rename to regression/cbmc-cpp/Overloading_Operators3/main.cpp diff --git a/regression/cpp-from-CVS/Overloading_Operators3/test.desc b/regression/cbmc-cpp/Overloading_Operators3/test.desc similarity index 100% rename from regression/cpp-from-CVS/Overloading_Operators3/test.desc rename to regression/cbmc-cpp/Overloading_Operators3/test.desc diff --git a/regression/cbmc-cpp/Overloading_Operators4/main.cpp b/regression/cbmc-cpp/Overloading_Operators4/main.cpp new file mode 100644 index 00000000000..d0c29257667 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators4/main.cpp @@ -0,0 +1,34 @@ +struct X +{ + X() : i(1), j(2) + { + } + + int i; + int j; + + bool operator==(const struct X &o) + { + return i == o.i && j == o.j; + } + + bool func() + { + X x1, x2; + x1.i = 2; + return x1 == x2; + } +}; + +void doit() +{ + X a, b; + + assert(a == b); +} + +int main() +{ + doit(); + assert(!X().func()); +} diff --git a/regression/cpp-from-CVS/Overloading_Operators6/test.desc b/regression/cbmc-cpp/Overloading_Operators4/test.desc similarity index 100% rename from regression/cpp-from-CVS/Overloading_Operators6/test.desc rename to regression/cbmc-cpp/Overloading_Operators4/test.desc diff --git a/regression/cbmc-cpp/Overloading_Operators5/main.cpp b/regression/cbmc-cpp/Overloading_Operators5/main.cpp new file mode 100644 index 00000000000..77a06670a32 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators5/main.cpp @@ -0,0 +1,35 @@ +int g; + +struct X +{ + X() + { + } + + int i; + int j; + + X &operator=(const struct X &r); +}; + +X &X::operator=(const struct X &r) +{ + g = 2; + return *this; +} + +void doit() +{ + X a, b; + + g = 1; + + a = b; + + assert(g == 2); +} + +int main() +{ + doit(); +} diff --git a/regression/cpp-from-CVS/Overloading_Operators9/test.desc b/regression/cbmc-cpp/Overloading_Operators5/test.desc similarity index 100% rename from regression/cpp-from-CVS/Overloading_Operators9/test.desc rename to regression/cbmc-cpp/Overloading_Operators5/test.desc diff --git a/regression/cbmc-cpp/Overloading_Operators6/main.cpp b/regression/cbmc-cpp/Overloading_Operators6/main.cpp new file mode 100644 index 00000000000..33dda14f1bd --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators6/main.cpp @@ -0,0 +1,61 @@ +struct A +{ + int i; + A() : i(1) + { + } + + int &operator*() + { + return i; + } + int operator+(int j) + { + return i + j; + } + int operator~() + { + return ~i; + } + int operator[](int k) + { + return i; + } + int operator==(int k) + { + return i = i; + } + + void func1() + { + A a; + assert(*a == 1); + assert(*a + 1 == 2); + assert(~a == ~1); + assert(a[2] == *a); + assert(a == 1); + } + + void func2() + { + A a; + assert((*this) == 1); + assert((*this) + 1 == 2); + assert(~(*this) == ~1); + assert((*this)[2] == *(*this)); + assert((*this) == 1); + } +}; + +int main() +{ + A o; + assert(*o == 1); + assert(*o + 1 == 2); + assert(~o == ~1); + assert(o[2] == *o); + assert(o == 1); + + o.func1(); + o.func2(); +} diff --git a/regression/cpp-from-CVS/Pointer_To_Member6/test.desc b/regression/cbmc-cpp/Overloading_Operators6/test.desc similarity index 100% rename from regression/cpp-from-CVS/Pointer_To_Member6/test.desc rename to regression/cbmc-cpp/Overloading_Operators6/test.desc diff --git a/regression/cbmc-cpp/Overloading_Operators7/main.cpp b/regression/cbmc-cpp/Overloading_Operators7/main.cpp new file mode 100644 index 00000000000..5a401c532a6 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators7/main.cpp @@ -0,0 +1,24 @@ +#include +int g; + +struct A +{ + int i; + A(int i) : i(i) + { + } + + friend bool operator==(const A &a1, const A &a2) + { + g = 10; + return a1.i == a2.i; + } +}; + +int main() +{ + A a1(1); + A a2(2); + assert(!(a1 == a2)); + assert(g == 10); +} diff --git a/regression/cbmc-cpp/Overloading_Operators7/test.desc b/regression/cbmc-cpp/Overloading_Operators7/test.desc new file mode 100644 index 00000000000..7791be248c7 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators7/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Overloading_Operators8/main.cpp b/regression/cbmc-cpp/Overloading_Operators8/main.cpp new file mode 100644 index 00000000000..ca01bdd12f4 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators8/main.cpp @@ -0,0 +1,22 @@ +#include +struct A +{ + int i; +}; + +A &operator<<(A &a1, A &a2) +{ + a1.i = a2.i; + a2.i = 0; + return a1; +} + +int main() +{ + A a1, a2; + a2.i = 400; + A a3(a1 << a2); + assert(a2.i == 0); + assert(a3.i == a1.i); + assert(a1.i == 400); +} diff --git a/regression/cbmc-cpp/Overloading_Operators8/test.desc b/regression/cbmc-cpp/Overloading_Operators8/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators8/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Overloading_Operators9/main.cpp b/regression/cbmc-cpp/Overloading_Operators9/main.cpp new file mode 100644 index 00000000000..56a279f65cd --- /dev/null +++ b/regression/cbmc-cpp/Overloading_Operators9/main.cpp @@ -0,0 +1,30 @@ + +struct C +{ + int d; +}; + +struct B +{ + C c; + C *operator->() + { + return &c; + } +}; + +struct A +{ + B b; + B &operator->() + { + return b; + } +}; + +int main() +{ + A a; + a->d = 2; + assert(a.b.c.d == 2); +} diff --git a/regression/cpp-from-CVS/Reference1/test.desc b/regression/cbmc-cpp/Overloading_Operators9/test.desc similarity index 100% rename from regression/cpp-from-CVS/Reference1/test.desc rename to regression/cbmc-cpp/Overloading_Operators9/test.desc diff --git a/regression/cbmc-cpp/Pointer_Conversion2/main.cpp b/regression/cbmc-cpp/Pointer_Conversion2/main.cpp new file mode 100644 index 00000000000..ed2e29f5117 --- /dev/null +++ b/regression/cbmc-cpp/Pointer_Conversion2/main.cpp @@ -0,0 +1,12 @@ +#include +char a[100]; + +void f(const signed char x[]) +{ + assert(x[0] == 0); +} + +int main() +{ + f(a); +} diff --git a/regression/cbmc-cpp/Pointer_Conversion2/test.desc b/regression/cbmc-cpp/Pointer_Conversion2/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Pointer_Conversion2/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Pointer_Conversion3/main.cpp b/regression/cbmc-cpp/Pointer_Conversion3/main.cpp new file mode 100644 index 00000000000..c7e1c3fb021 --- /dev/null +++ b/regression/cbmc-cpp/Pointer_Conversion3/main.cpp @@ -0,0 +1,17 @@ +struct A +{ + int i; +}; + +struct B +{ + int j; + int k; +}; + +int main() +{ + A *pa; + B *pb; + pb = static_cast(pa); // ill-formed +} diff --git a/regression/cpp-from-CVS/Pointer_Conversion3/test.desc b/regression/cbmc-cpp/Pointer_Conversion3/test.desc similarity index 100% rename from regression/cpp-from-CVS/Pointer_Conversion3/test.desc rename to regression/cbmc-cpp/Pointer_Conversion3/test.desc diff --git a/regression/cbmc-cpp/Pointer_To_Member1/main.cpp b/regression/cbmc-cpp/Pointer_To_Member1/main.cpp new file mode 100644 index 00000000000..d0fca4cf93d --- /dev/null +++ b/regression/cbmc-cpp/Pointer_To_Member1/main.cpp @@ -0,0 +1,19 @@ +class A +{ +public: + int f(char i) + { + return i + 1; + } +}; + +A a; +int (A::*paf)(char) = &A::f; +int main() +{ + int v1 = (a.*paf)(0); + int v2 = ((&a)->*paf)(1); + + assert(v1 == 1); + assert(v2 == 2); +} diff --git a/regression/cpp-from-CVS/Resolver13/test.desc b/regression/cbmc-cpp/Pointer_To_Member1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Resolver13/test.desc rename to regression/cbmc-cpp/Pointer_To_Member1/test.desc diff --git a/regression/cbmc-cpp/Pointer_To_Member2/main.cpp b/regression/cbmc-cpp/Pointer_To_Member2/main.cpp new file mode 100644 index 00000000000..47e4afd00e3 --- /dev/null +++ b/regression/cbmc-cpp/Pointer_To_Member2/main.cpp @@ -0,0 +1,14 @@ +class A +{ + int a; +}; + +int f(A *pa, char i) +{ + return i + 1; +} + +int main() +{ + int (A::*paf)(char) = &f; // ill-formed +} diff --git a/regression/cpp-from-CVS/Pointer_To_Member2/test.desc b/regression/cbmc-cpp/Pointer_To_Member2/test.desc similarity index 100% rename from regression/cpp-from-CVS/Pointer_To_Member2/test.desc rename to regression/cbmc-cpp/Pointer_To_Member2/test.desc diff --git a/regression/cbmc-cpp/Pointer_To_Member3/main.cpp b/regression/cbmc-cpp/Pointer_To_Member3/main.cpp new file mode 100644 index 00000000000..35a94622fea --- /dev/null +++ b/regression/cbmc-cpp/Pointer_To_Member3/main.cpp @@ -0,0 +1,14 @@ +class A +{ +public: + int a; + int f(char i) + { + return i + 1; + } +}; + +int main() +{ + int (*pf)(A *, char) = &A::f; // ill-formed +} diff --git a/regression/cpp-from-CVS/Pointer_To_Member3/test.desc b/regression/cbmc-cpp/Pointer_To_Member3/test.desc similarity index 100% rename from regression/cpp-from-CVS/Pointer_To_Member3/test.desc rename to regression/cbmc-cpp/Pointer_To_Member3/test.desc diff --git a/regression/cbmc-cpp/Pointer_To_Member4/main.cpp b/regression/cbmc-cpp/Pointer_To_Member4/main.cpp new file mode 100644 index 00000000000..7c8e02ad818 --- /dev/null +++ b/regression/cbmc-cpp/Pointer_To_Member4/main.cpp @@ -0,0 +1,15 @@ +class A +{ +public: + int f() + { + return 1; + } +}; + +int main() +{ + int (A::*paf)() = &A::f; + A a; + (*paf)(&a); // ill-formed +} diff --git a/regression/cpp-from-CVS/Pointer_To_Member4/test.desc b/regression/cbmc-cpp/Pointer_To_Member4/test.desc similarity index 100% rename from regression/cpp-from-CVS/Pointer_To_Member4/test.desc rename to regression/cbmc-cpp/Pointer_To_Member4/test.desc diff --git a/regression/cbmc-cpp/Pointer_To_Member5/main.cpp b/regression/cbmc-cpp/Pointer_To_Member5/main.cpp new file mode 100644 index 00000000000..268446fccc6 --- /dev/null +++ b/regression/cbmc-cpp/Pointer_To_Member5/main.cpp @@ -0,0 +1,29 @@ + +struct A +{ + int i; + int func() + { + return i; + } +}; + +struct B +{ + A *pa; + int (A::*pmethod)(); + B(A *pa, int (A::*pmethod)()) : pa(pa), pmethod(pmethod) + { + } + int eval() + { + return (pa->*pmethod)(); + } +}; + +int main() +{ + A a; + B b(&a, &A::func); + assert(b.eval() == a.i); +} diff --git a/regression/cpp-from-CVS/Resolver5/test.desc b/regression/cbmc-cpp/Pointer_To_Member5/test.desc similarity index 100% rename from regression/cpp-from-CVS/Resolver5/test.desc rename to regression/cbmc-cpp/Pointer_To_Member5/test.desc diff --git a/regression/cbmc-cpp/Pointer_To_Member6/main.cpp b/regression/cbmc-cpp/Pointer_To_Member6/main.cpp new file mode 100644 index 00000000000..11f79dd5287 --- /dev/null +++ b/regression/cbmc-cpp/Pointer_To_Member6/main.cpp @@ -0,0 +1,23 @@ +struct A +{ + int i; + void func() + { + i = 10; + } +}; + +struct B : public A +{ + void (A::*pmeth)(); + B() : pmeth(&A::func) + { + (this->*pmeth)(); + } +}; + +int main() +{ + B b; + assert(b.i == 10); +} diff --git a/regression/cpp-from-CVS/STL1/test.desc b/regression/cbmc-cpp/Pointer_To_Member6/test.desc similarity index 100% rename from regression/cpp-from-CVS/STL1/test.desc rename to regression/cbmc-cpp/Pointer_To_Member6/test.desc diff --git a/regression/cbmc-cpp/Protection2/main.cpp b/regression/cbmc-cpp/Protection2/main.cpp new file mode 100644 index 00000000000..3a3ac251171 --- /dev/null +++ b/regression/cbmc-cpp/Protection2/main.cpp @@ -0,0 +1,26 @@ +#include +struct A +{ +protected: + int i; +}; + +class B : A +{ +public: + void set(int i) + { + this->i = i; + } + int get() const + { + return i; + } +}; + +int main() +{ + B b; + b.set(0); + assert(b.get() == 0); +} diff --git a/regression/cbmc-cpp/Protection2/test.desc b/regression/cbmc-cpp/Protection2/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Protection2/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Protection3/main.cpp b/regression/cbmc-cpp/Protection3/main.cpp new file mode 100644 index 00000000000..7bd24e0b4e5 --- /dev/null +++ b/regression/cbmc-cpp/Protection3/main.cpp @@ -0,0 +1,13 @@ +class A +{ + int i; + +public: + class B + { + int get(const A &a) + { + return a.i; + } + }; +}; diff --git a/regression/cpp-from-CVS/Protection1/test.desc b/regression/cbmc-cpp/Protection3/test.desc similarity index 100% rename from regression/cpp-from-CVS/Protection1/test.desc rename to regression/cbmc-cpp/Protection3/test.desc diff --git a/regression/cbmc-cpp/Protection4/main.cpp b/regression/cbmc-cpp/Protection4/main.cpp new file mode 100644 index 00000000000..7b09f14fe14 --- /dev/null +++ b/regression/cbmc-cpp/Protection4/main.cpp @@ -0,0 +1,18 @@ +struct A +{ +private: + int i; +}; + +class B : public A +{ +public: + void set(int i) + { + this->i = i; + } + int get() const + { + return i; + } +}; diff --git a/regression/cpp-from-CVS/Protection3/test.desc b/regression/cbmc-cpp/Protection4/test.desc similarity index 100% rename from regression/cpp-from-CVS/Protection3/test.desc rename to regression/cbmc-cpp/Protection4/test.desc diff --git a/regression/cbmc-cpp/Protection5/main.cpp b/regression/cbmc-cpp/Protection5/main.cpp new file mode 100644 index 00000000000..b1ac8ab2537 --- /dev/null +++ b/regression/cbmc-cpp/Protection5/main.cpp @@ -0,0 +1,20 @@ +class A +{ +public: + int i; +}; + +class B : A +{ +}; + +void set_one(A &a) +{ + a.i = 1; +} + +int main() +{ + B b; + set_one(b); +} diff --git a/regression/cpp-from-CVS/Protection5/test.desc b/regression/cbmc-cpp/Protection5/test.desc similarity index 100% rename from regression/cpp-from-CVS/Protection5/test.desc rename to regression/cbmc-cpp/Protection5/test.desc diff --git a/regression/cbmc-cpp/Protection6/main.cpp b/regression/cbmc-cpp/Protection6/main.cpp new file mode 100644 index 00000000000..4d6770c841e --- /dev/null +++ b/regression/cbmc-cpp/Protection6/main.cpp @@ -0,0 +1,11 @@ +class A +{ + static void func() + { + } +}; + +int main() +{ + A::func(); +} diff --git a/regression/cpp-from-CVS/Protection6/test.desc b/regression/cbmc-cpp/Protection6/test.desc similarity index 100% rename from regression/cpp-from-CVS/Protection6/test.desc rename to regression/cbmc-cpp/Protection6/test.desc diff --git a/regression/cbmc-cpp/Protection7/main.cpp b/regression/cbmc-cpp/Protection7/main.cpp new file mode 100644 index 00000000000..ec49c783336 --- /dev/null +++ b/regression/cbmc-cpp/Protection7/main.cpp @@ -0,0 +1,24 @@ +struct A +{ + int i; + A(){}; + +protected: + A(int i) : i(i) + { + } +}; + +struct B : A +{ + B() : A(0) + { + } +}; + +B b; + +int main() +{ + assert(b.i == 0); +} diff --git a/regression/cpp-from-CVS/Templates16/test.desc b/regression/cbmc-cpp/Protection7/test.desc similarity index 100% rename from regression/cpp-from-CVS/Templates16/test.desc rename to regression/cbmc-cpp/Protection7/test.desc diff --git a/regression/cbmc-cpp/Protection8/main.cpp b/regression/cbmc-cpp/Protection8/main.cpp new file mode 100644 index 00000000000..dc14c23cac8 --- /dev/null +++ b/regression/cbmc-cpp/Protection8/main.cpp @@ -0,0 +1,27 @@ +struct A +{ +protected: + int i; + int get_i() + { + return i; + } + + A(int i) : i(i) + { + } +}; + +struct B : A +{ + B() : A(0) + { + } +}; + +B b; + +int main() +{ + assert(b.get_i() == 0); +} diff --git a/regression/cpp-from-CVS/Protection8/test.desc b/regression/cbmc-cpp/Protection8/test.desc similarity index 100% rename from regression/cpp-from-CVS/Protection8/test.desc rename to regression/cbmc-cpp/Protection8/test.desc diff --git a/regression/cbmc-cpp/Qualifier1/main.cpp b/regression/cbmc-cpp/Qualifier1/main.cpp new file mode 100644 index 00000000000..aeb5ff5cfd2 --- /dev/null +++ b/regression/cbmc-cpp/Qualifier1/main.cpp @@ -0,0 +1,12 @@ +struct A +{ + int a; +}; + +struct B +{ + void f() + { + A::a = 1; // ill-formed + } +}; diff --git a/regression/cpp-from-CVS/Protection4/test.desc b/regression/cbmc-cpp/Qualifier1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Protection4/test.desc rename to regression/cbmc-cpp/Qualifier1/test.desc diff --git a/regression/cbmc-cpp/Qualifier2/main.cpp b/regression/cbmc-cpp/Qualifier2/main.cpp new file mode 100644 index 00000000000..2c523a11e09 --- /dev/null +++ b/regression/cbmc-cpp/Qualifier2/main.cpp @@ -0,0 +1,24 @@ +#include +struct A +{ + static int i; +}; + +struct B : public A +{ + static int i; +}; + +int main() +{ + A::i = 0; + B::i = 1; + assert(A::i == 0); + assert(B::i == 1); + + B obj; + obj.i++; + assert(B::i == 2); + obj.A::i++; + assert(A::i == 1); +} diff --git a/regression/cbmc-cpp/Qualifier2/test.desc b/regression/cbmc-cpp/Qualifier2/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Qualifier2/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cpp-from-CVS/Qualifier3/main.cpp b/regression/cbmc-cpp/Qualifier3/main.cpp similarity index 100% rename from regression/cpp-from-CVS/Qualifier3/main.cpp rename to regression/cbmc-cpp/Qualifier3/main.cpp diff --git a/regression/cpp-from-CVS/Qualifier1/test.desc b/regression/cbmc-cpp/Qualifier3/test.desc similarity index 100% rename from regression/cpp-from-CVS/Qualifier1/test.desc rename to regression/cbmc-cpp/Qualifier3/test.desc diff --git a/regression/cbmc-cpp/Qualifier4/main.cpp b/regression/cbmc-cpp/Qualifier4/main.cpp new file mode 100644 index 00000000000..6d932593e0e --- /dev/null +++ b/regression/cbmc-cpp/Qualifier4/main.cpp @@ -0,0 +1,9 @@ +struct A +{ + int f(); +}; + +int main() +{ + int i = (int)A::f; +} diff --git a/regression/cpp-from-CVS/Qualifier4/test.desc b/regression/cbmc-cpp/Qualifier4/test.desc similarity index 100% rename from regression/cpp-from-CVS/Qualifier4/test.desc rename to regression/cbmc-cpp/Qualifier4/test.desc diff --git a/regression/cbmc-cpp/Reference1/main.cpp b/regression/cbmc-cpp/Reference1/main.cpp new file mode 100644 index 00000000000..76df1b077a3 --- /dev/null +++ b/regression/cbmc-cpp/Reference1/main.cpp @@ -0,0 +1,22 @@ +int g; + +void function(int &ref) +{ + ref = 2; +} + +int main() +{ + int &r = g; + + r = 1; + + assert(g == 1); + + function(r); + + assert(g == 2); + + // ?: does produce an l-value, apparently + int &s = g ? r : g; +} diff --git a/regression/cpp-from-CVS/Templates20/test.desc b/regression/cbmc-cpp/Reference1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Templates20/test.desc rename to regression/cbmc-cpp/Reference1/test.desc diff --git a/regression/cbmc-cpp/Reference2/main.cpp b/regression/cbmc-cpp/Reference2/main.cpp new file mode 100644 index 00000000000..f1a06cd08b2 --- /dev/null +++ b/regression/cbmc-cpp/Reference2/main.cpp @@ -0,0 +1,30 @@ +#include +int g; + +class X +{ +}; + +int &function() +{ + return g; +} + +int main() +{ + g = 1; + function() = 2; + assert(g == 2); + + { + int *p = &g; + int &r = *p; + assert(r == 2); + } + + { + X x; + X *p = &x; + X &r = *p; + } +} diff --git a/regression/cbmc-cpp/Reference2/test.desc b/regression/cbmc-cpp/Reference2/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Reference2/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Reference3/main.cpp b/regression/cbmc-cpp/Reference3/main.cpp new file mode 100644 index 00000000000..41e708bce22 --- /dev/null +++ b/regression/cbmc-cpp/Reference3/main.cpp @@ -0,0 +1,22 @@ +#include +class A +{ +public: + int &i; + A(int &i) : i(i) + { + } + +private: + A &operator=(const A &); +}; + +int main() +{ + int var; + int &ref = var; + var = 10; + A a(var); + a.i = 20; + assert(var == 20); +} diff --git a/regression/cbmc-cpp/Reference3/test.desc b/regression/cbmc-cpp/Reference3/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Reference3/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Reference4/main.cpp b/regression/cbmc-cpp/Reference4/main.cpp new file mode 100644 index 00000000000..6d60cd5d77f --- /dev/null +++ b/regression/cbmc-cpp/Reference4/main.cpp @@ -0,0 +1,4 @@ +class A +{ + int &a; +}; diff --git a/regression/cpp-from-CVS/Qualifier3/test.desc b/regression/cbmc-cpp/Reference4/test.desc similarity index 100% rename from regression/cpp-from-CVS/Qualifier3/test.desc rename to regression/cbmc-cpp/Reference4/test.desc diff --git a/regression/cbmc-cpp/Reference5/main.cpp b/regression/cbmc-cpp/Reference5/main.cpp new file mode 100644 index 00000000000..f083e51af6d --- /dev/null +++ b/regression/cbmc-cpp/Reference5/main.cpp @@ -0,0 +1,7 @@ +class A +{ + int &a; + A() : a() + { + } +}; diff --git a/regression/cpp-from-CVS/Reference4/test.desc b/regression/cbmc-cpp/Reference5/test.desc similarity index 100% rename from regression/cpp-from-CVS/Reference4/test.desc rename to regression/cbmc-cpp/Reference5/test.desc diff --git a/regression/cbmc-cpp/Reference6/main.cpp b/regression/cbmc-cpp/Reference6/main.cpp new file mode 100644 index 00000000000..cb80bf9f6f3 --- /dev/null +++ b/regression/cbmc-cpp/Reference6/main.cpp @@ -0,0 +1,26 @@ +#include +class X +{ +public: + int x; + + X() : x(0) + { + } +}; + +X g, y; + +X &r() +{ + return g; +} + +int main() +{ + y.x = 10; + + r() = y; + + assert(g.x == 10); +} diff --git a/regression/cbmc-cpp/Reference6/test.desc b/regression/cbmc-cpp/Reference6/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Reference6/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Reference7/main.cpp b/regression/cbmc-cpp/Reference7/main.cpp new file mode 100644 index 00000000000..b833d012759 --- /dev/null +++ b/regression/cbmc-cpp/Reference7/main.cpp @@ -0,0 +1,9 @@ +#include + +int main() +{ + int i = 8; + int *p = &i; + int *&rp = p; + assert(*rp == 8); +} diff --git a/regression/cbmc-cpp/Reference7/test.desc b/regression/cbmc-cpp/Reference7/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Reference7/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Reference8/main.cpp b/regression/cbmc-cpp/Reference8/main.cpp new file mode 100644 index 00000000000..26ce83d9c5f --- /dev/null +++ b/regression/cbmc-cpp/Reference8/main.cpp @@ -0,0 +1,4 @@ +int main() +{ + int *&*p; // parsing error +} diff --git a/regression/cpp-from-CVS/Reference8/test.desc b/regression/cbmc-cpp/Reference8/test.desc similarity index 100% rename from regression/cpp-from-CVS/Reference8/test.desc rename to regression/cbmc-cpp/Reference8/test.desc diff --git a/regression/cbmc-cpp/Resolver13/main.cpp b/regression/cbmc-cpp/Resolver13/main.cpp new file mode 100644 index 00000000000..c0177eeb948 --- /dev/null +++ b/regression/cbmc-cpp/Resolver13/main.cpp @@ -0,0 +1,31 @@ +#include + +struct A +{ + A *operator->() + { + return this; + } + int one() + { + return 1; + } + int one(int &i) + { + i = 1; + } +}; + +struct B : public A +{ + A *operator->() + { + return this; + } +}; + +int main() +{ + B b; + assert(b->one() == 1); +} diff --git a/regression/cpp-from-CVS/Templates27/test.desc b/regression/cbmc-cpp/Resolver13/test.desc similarity index 100% rename from regression/cpp-from-CVS/Templates27/test.desc rename to regression/cbmc-cpp/Resolver13/test.desc diff --git a/regression/cbmc-cpp/Resolver5/main.cpp b/regression/cbmc-cpp/Resolver5/main.cpp new file mode 100644 index 00000000000..03bd30c27db --- /dev/null +++ b/regression/cbmc-cpp/Resolver5/main.cpp @@ -0,0 +1,22 @@ +namespace n1 +{ +struct A +{ + int i; +}; + +int func(A a) +{ + return a.i; +} +} // namespace n1 + +int main() +{ + n1::A obj1; + obj1.i = 200; + + assert(func(obj1) == 200); // Argument-dependant name lookup + + return 0; +} diff --git a/regression/cpp-from-CVS/Templates29/test.desc b/regression/cbmc-cpp/Resolver5/test.desc similarity index 100% rename from regression/cpp-from-CVS/Templates29/test.desc rename to regression/cbmc-cpp/Resolver5/test.desc diff --git a/regression/cbmc-cpp/Resolver6/main.cpp b/regression/cbmc-cpp/Resolver6/main.cpp new file mode 100644 index 00000000000..5279866e455 --- /dev/null +++ b/regression/cbmc-cpp/Resolver6/main.cpp @@ -0,0 +1,16 @@ +#include +bool f(char c) +{ + return false; +} + +bool f(int i, int j = 0) +{ + return true; +} + +int main() +{ + assert(f(5)); + return 0; +} diff --git a/regression/cbmc-cpp/Resolver6/test.desc b/regression/cbmc-cpp/Resolver6/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Resolver6/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Resolver7/main.cpp b/regression/cbmc-cpp/Resolver7/main.cpp new file mode 100644 index 00000000000..da79a2ddce7 --- /dev/null +++ b/regression/cbmc-cpp/Resolver7/main.cpp @@ -0,0 +1,18 @@ +#include +extern const char hello[]; + +bool func(const char *str) +{ + return true; +} +bool func(char *) +{ + return false; +} + +int main() +{ + assert(func(hello)); +} + +const char hello[] = "hello"; diff --git a/regression/cbmc-cpp/Resolver7/test.desc b/regression/cbmc-cpp/Resolver7/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Resolver7/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Resolver8/main.cpp b/regression/cbmc-cpp/Resolver8/main.cpp new file mode 100644 index 00000000000..bcc49040e50 --- /dev/null +++ b/regression/cbmc-cpp/Resolver8/main.cpp @@ -0,0 +1,17 @@ +#include +bool func() +{ + return true; +} + +bool func(int i) +{ + if(i == 0) + return false; + return func(); +} + +int main() +{ + assert(func(1)); +} diff --git a/regression/cbmc-cpp/Resolver8/test.desc b/regression/cbmc-cpp/Resolver8/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Resolver8/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Resolver9/main.cpp b/regression/cbmc-cpp/Resolver9/main.cpp new file mode 100644 index 00000000000..07b41115b6c --- /dev/null +++ b/regression/cbmc-cpp/Resolver9/main.cpp @@ -0,0 +1,13 @@ +struct A +{ + typedef int INT; +}; + +struct B : A +{ +}; + +int main() +{ + B::INT i; +} diff --git a/regression/cpp-from-CVS/ConditionalExpression2/test.desc b/regression/cbmc-cpp/Resolver9/test.desc similarity index 100% rename from regression/cpp-from-CVS/ConditionalExpression2/test.desc rename to regression/cbmc-cpp/Resolver9/test.desc diff --git a/regression/cbmc-cpp/STL1/main.cpp b/regression/cbmc-cpp/STL1/main.cpp new file mode 100644 index 00000000000..b233b675050 --- /dev/null +++ b/regression/cbmc-cpp/STL1/main.cpp @@ -0,0 +1,65 @@ +#include +#include +#include + +struct X +{ + int i; +}; + +void test_vector() +{ + std::vector int_vector; + std::vector::const_iterator it; + + int_vector.push_back(1); + int_vector.push_back(2); + assert(int_vector.front() == 1); + assert(int_vector.back() == 2); + assert(*int_vector.begin() == 1); + it = int_vector.begin(); + assert(*it == 1); + + int_vector.pop_back(); + int_vector.pop_back(); + assert(int_vector.empty()); +} + +void test_list() +{ + std::list int_list; + + int_list.push_back(1); + int_list.push_back(2); + assert(int_list.front() == 1); + assert(int_list.back() == 2); + assert(*int_list.begin() == 1); + + int_list.pop_back(); + int_list.pop_back(); + assert(int_list.empty()); +} + +void test_set() +{ +} + +int nondet_int(); + +int main() +{ + switch(nondet_int()) + { + case 0: + test_vector(); + break; + case 1: + test_list(); + break; + case 2: + test_set(); + break; + + default:; + } +} diff --git a/regression/cpp-from-CVS/Templates31/test.desc b/regression/cbmc-cpp/STL1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Templates31/test.desc rename to regression/cbmc-cpp/STL1/test.desc diff --git a/regression/cbmc-cpp/STL2/main.cpp b/regression/cbmc-cpp/STL2/main.cpp new file mode 100644 index 00000000000..9d7efbb3e3f --- /dev/null +++ b/regression/cbmc-cpp/STL2/main.cpp @@ -0,0 +1,20 @@ +#include + +bool nondet_bool(); +int nondet_int(); + +using namespace std; + +int main() +{ + vector v; + + while(nondet_bool()) + v.push_back(nondet_int()); + + vector::iterator it; + + for(it = v.begin(); it != v.end(); it++) + if(*it == 10) + v.erase(it); +} diff --git a/regression/cpp-from-CVS/STL2/test.desc b/regression/cbmc-cpp/STL2/test.desc similarity index 100% rename from regression/cpp-from-CVS/STL2/test.desc rename to regression/cbmc-cpp/STL2/test.desc diff --git a/regression/cbmc-cpp/Static_Member1/main.cpp b/regression/cbmc-cpp/Static_Member1/main.cpp new file mode 100644 index 00000000000..2dba9c200fa --- /dev/null +++ b/regression/cbmc-cpp/Static_Member1/main.cpp @@ -0,0 +1,20 @@ +class B +{ +public: + static int A1; + static int A2; + static const int A3 = 20; + + // the const ones are good as array size + int table[A3]; +}; + +int B::A1 = 1; +int B::A2; + +int main() +{ + assert(B::A1 == 1); + assert(B::A2 == 0); // zero initializer + assert(B::A3 == 20); // in-class initializer +} diff --git a/regression/cpp-from-CVS/Templates32/test.desc b/regression/cbmc-cpp/Static_Member1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Templates32/test.desc rename to regression/cbmc-cpp/Static_Member1/test.desc diff --git a/regression/cbmc-cpp/Static_Member_Function/main.cpp b/regression/cbmc-cpp/Static_Member_Function/main.cpp new file mode 100644 index 00000000000..8fde198dd7e --- /dev/null +++ b/regression/cbmc-cpp/Static_Member_Function/main.cpp @@ -0,0 +1,30 @@ +// call from outside class + +class t +{ +public: + int i; + static void f() + { + } +}; + +int main() +{ + t::f(); +} + +// call from inside class + +class A +{ + static void g(); + static void g(int i); + + void f(); +}; + +void A::f() +{ + g(); +} diff --git a/regression/cpp-from-CVS/Constructor1/test.desc b/regression/cbmc-cpp/Static_Member_Function/test.desc similarity index 100% rename from regression/cpp-from-CVS/Constructor1/test.desc rename to regression/cbmc-cpp/Static_Member_Function/test.desc diff --git a/regression/cbmc-cpp/Static_Method1/main.cpp b/regression/cbmc-cpp/Static_Method1/main.cpp new file mode 100644 index 00000000000..e9d34cc61b8 --- /dev/null +++ b/regression/cbmc-cpp/Static_Method1/main.cpp @@ -0,0 +1,18 @@ +#include +struct A +{ + static int Value(int v) + { + return v; + } + static int Value(int v1, int v2) + { + return 1; + } +}; + +int main() +{ + A a; + assert(a.Value(0) == 0); +} diff --git a/regression/cbmc-cpp/Static_Method1/test.desc b/regression/cbmc-cpp/Static_Method1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Static_Method1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/String_Literal1/main.cpp b/regression/cbmc-cpp/String_Literal1/main.cpp new file mode 100644 index 00000000000..5f7314cc118 --- /dev/null +++ b/regression/cbmc-cpp/String_Literal1/main.cpp @@ -0,0 +1,8 @@ +#include +int main() +{ + const char *p = + "asd" + "1"; + assert(p[3] == '1'); +} diff --git a/regression/cbmc-cpp/String_Literal1/test.desc b/regression/cbmc-cpp/String_Literal1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/String_Literal1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Templates1/main.cpp b/regression/cbmc-cpp/Templates1/main.cpp new file mode 100644 index 00000000000..1a064f76321 --- /dev/null +++ b/regression/cbmc-cpp/Templates1/main.cpp @@ -0,0 +1,17 @@ +template +void f(T x) +{ + assert(x); +} + +template +void eq(int z) +{ + assert(i == z); +} + +int main() +{ + eq<2>(2); + f(1); +} diff --git a/regression/cpp-from-CVS/Templates34/test.desc b/regression/cbmc-cpp/Templates1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Templates34/test.desc rename to regression/cbmc-cpp/Templates1/test.desc diff --git a/regression/cbmc-cpp/Templates10/main.cpp b/regression/cbmc-cpp/Templates10/main.cpp new file mode 100644 index 00000000000..0c8ca504e49 --- /dev/null +++ b/regression/cbmc-cpp/Templates10/main.cpp @@ -0,0 +1,25 @@ +#include +template +int func() +{ + return 0; +} + +template <> +int func() +{ + return 1; +} + +template <> +int func() +{ + return 2; +} + +int main() +{ + assert(func() == 0); + assert(func() == 1); + assert(func() == 2); +} diff --git a/regression/cbmc-cpp/Templates10/test.desc b/regression/cbmc-cpp/Templates10/test.desc new file mode 100644 index 00000000000..7791be248c7 --- /dev/null +++ b/regression/cbmc-cpp/Templates10/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Templates11/main.cpp b/regression/cbmc-cpp/Templates11/main.cpp new file mode 100644 index 00000000000..34805dfeac7 --- /dev/null +++ b/regression/cbmc-cpp/Templates11/main.cpp @@ -0,0 +1,28 @@ +#include +template +bool func(T t) +{ + return false; +} + +template <> +bool func(int t) +{ + return true; +} + +template +struct Test +{ + bool f() + { + A a; + return func(a); + } +}; + +int main() +{ + Test t1; + assert(t1.f() == true); +} diff --git a/regression/cbmc-cpp/Templates11/test.desc b/regression/cbmc-cpp/Templates11/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Templates11/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Templates12/main.cpp b/regression/cbmc-cpp/Templates12/main.cpp new file mode 100644 index 00000000000..6e6ff2ec632 --- /dev/null +++ b/regression/cbmc-cpp/Templates12/main.cpp @@ -0,0 +1,18 @@ +#include + +template +struct A +{ + T t; + bool eq(const A &ref) const + { + return ref.t == t; + } +}; + +int main() +{ + A a; + a.t = 10; + assert(a.eq(a)); +} diff --git a/regression/cbmc-cpp/Templates12/test.desc b/regression/cbmc-cpp/Templates12/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Templates12/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Templates13/main.cpp b/regression/cbmc-cpp/Templates13/main.cpp new file mode 100644 index 00000000000..6064f0c5df8 --- /dev/null +++ b/regression/cbmc-cpp/Templates13/main.cpp @@ -0,0 +1,17 @@ +#include +template +bool func() +{ + return func(); +} + +template <> +bool func() +{ + return true; +} + +int main() +{ + assert(func()); +} diff --git a/regression/cbmc-cpp/Templates13/test.desc b/regression/cbmc-cpp/Templates13/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Templates13/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Templates14/main.cpp b/regression/cbmc-cpp/Templates14/main.cpp new file mode 100644 index 00000000000..48a17aadd54 --- /dev/null +++ b/regression/cbmc-cpp/Templates14/main.cpp @@ -0,0 +1,23 @@ +#include + +namespace n1 +{ +template +struct A +{ + S a; +}; +} // namespace n1 + +template +struct B +{ + n1::A b; +}; + +int main() +{ + B o; + o.b.a = true; + assert(o.b.a == true); +}; diff --git a/regression/cbmc-cpp/Templates14/test.desc b/regression/cbmc-cpp/Templates14/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Templates14/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Templates16/main.cpp b/regression/cbmc-cpp/Templates16/main.cpp new file mode 100644 index 00000000000..d682988cae4 --- /dev/null +++ b/regression/cbmc-cpp/Templates16/main.cpp @@ -0,0 +1,21 @@ +#include + +template +struct A +{ + T t; +}; + +struct B +{ + int i; + B() : i(0) + { + } +}; + +int main() +{ + A a; + assert(a.t.i == 0); +} diff --git a/regression/cpp-from-CVS/Templates36/test.desc b/regression/cbmc-cpp/Templates16/test.desc similarity index 100% rename from regression/cpp-from-CVS/Templates36/test.desc rename to regression/cbmc-cpp/Templates16/test.desc diff --git a/regression/cbmc-cpp/Templates17/main.cpp b/regression/cbmc-cpp/Templates17/main.cpp new file mode 100644 index 00000000000..dddf84bf27e --- /dev/null +++ b/regression/cbmc-cpp/Templates17/main.cpp @@ -0,0 +1,24 @@ + +template +struct A +{ + bool b; + A() + { + } +}; + +template <> +struct A; + +template <> +struct A +{ + bool b; +}; + +int main() +{ + A a; + a.b = false; +} diff --git a/regression/cpp-from-CVS/Constructor10/test.desc b/regression/cbmc-cpp/Templates17/test.desc similarity index 100% rename from regression/cpp-from-CVS/Constructor10/test.desc rename to regression/cbmc-cpp/Templates17/test.desc diff --git a/regression/cbmc-cpp/Templates18/main.cpp b/regression/cbmc-cpp/Templates18/main.cpp new file mode 100644 index 00000000000..1ba26256fae --- /dev/null +++ b/regression/cbmc-cpp/Templates18/main.cpp @@ -0,0 +1,25 @@ +template +struct A; + +template +struct A +{ + A() + { + } +}; + +template <> +struct A +{ + int b; + A() + { + } +}; + +int main() +{ + A a; + a.b = false; +} diff --git a/regression/cpp-from-CVS/Constructor12/test.desc b/regression/cbmc-cpp/Templates18/test.desc similarity index 100% rename from regression/cpp-from-CVS/Constructor12/test.desc rename to regression/cbmc-cpp/Templates18/test.desc diff --git a/regression/cbmc-cpp/Templates19/main.cpp b/regression/cbmc-cpp/Templates19/main.cpp new file mode 100644 index 00000000000..4ca08cf3ba4 --- /dev/null +++ b/regression/cbmc-cpp/Templates19/main.cpp @@ -0,0 +1,21 @@ +#include +template +struct A +{ + T i; +}; + +template +T get_i(const A a1) +{ + return a1.i; +} + +int main() +{ + A a2; + a2.i = 10; + assert(a2.i == 10); + assert(get_i(a2) == 10); + get_i(a2); +} diff --git a/regression/cbmc-cpp/Templates19/test.desc b/regression/cbmc-cpp/Templates19/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Templates19/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Templates20/main.cpp b/regression/cbmc-cpp/Templates20/main.cpp new file mode 100644 index 00000000000..677811efce0 --- /dev/null +++ b/regression/cbmc-cpp/Templates20/main.cpp @@ -0,0 +1,52 @@ +#include + +struct A +{ + int i; + A() : i(10) + { + } + +private: + A(const A &a); // disabled +}; + +template +class B : A +{ +public: + T t; + B(){}; + int get_i() + { + return i; + } + +private: + B(B &b); // disabled +}; + +template <> +class B : A +{ +public: + bool b; + B() : b(true) + { + } + int get_i() + { + return i; + } + +private: + B(B &b); // disabled +}; + +B b1; +int main() +{ + assert(b1.t == 0); + B b2; + assert(b2.b == true); +} diff --git a/regression/cpp-from-CVS/Templates4/test.desc b/regression/cbmc-cpp/Templates20/test.desc similarity index 100% rename from regression/cpp-from-CVS/Templates4/test.desc rename to regression/cbmc-cpp/Templates20/test.desc diff --git a/regression/cbmc-cpp/Templates21/main.cpp b/regression/cbmc-cpp/Templates21/main.cpp new file mode 100644 index 00000000000..346e386f485 --- /dev/null +++ b/regression/cbmc-cpp/Templates21/main.cpp @@ -0,0 +1,26 @@ +#include + +template +struct A +{ + T i; + void write(T i) + { + this->i = i; + } +}; + +struct B : A +{ + void write(bool i) + { + A::write(i); + } +}; + +int main() +{ + B b; + b.write(true); + assert(b.i == true); +} diff --git a/regression/cbmc-cpp/Templates21/test.desc b/regression/cbmc-cpp/Templates21/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Templates21/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Templates22/main.cpp b/regression/cbmc-cpp/Templates22/main.cpp new file mode 100644 index 00000000000..9a3563f915e --- /dev/null +++ b/regression/cbmc-cpp/Templates22/main.cpp @@ -0,0 +1,18 @@ +#include +template +T func(T *t) +{ + return *t; +} + +template +T func(T t) +{ + return t; +} + +int main() +{ + int x = 10; + assert(func(&x) == func(x)); +} diff --git a/regression/cbmc-cpp/Templates22/test.desc b/regression/cbmc-cpp/Templates22/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Templates22/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Templates23/main.cpp b/regression/cbmc-cpp/Templates23/main.cpp new file mode 100644 index 00000000000..d800b1ce7e9 --- /dev/null +++ b/regression/cbmc-cpp/Templates23/main.cpp @@ -0,0 +1,19 @@ +#include + +template +struct A +{ + static const unsigned n = N; +}; + +template +struct B +{ + A<0 + N> a; +}; + +int main() +{ + B<10> b; + assert(b.a.n == 10); +} diff --git a/regression/cbmc-cpp/Templates23/test.desc b/regression/cbmc-cpp/Templates23/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Templates23/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Templates24/main.cpp b/regression/cbmc-cpp/Templates24/main.cpp new file mode 100644 index 00000000000..8b1835abdc5 --- /dev/null +++ b/regression/cbmc-cpp/Templates24/main.cpp @@ -0,0 +1,19 @@ +#include + +template +struct A +{ + bool True(); +}; + +template +bool A::True() +{ + return true; +} + +int main() +{ + A a; + assert(a.True() == true); +} diff --git a/regression/cbmc-cpp/Templates24/test.desc b/regression/cbmc-cpp/Templates24/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Templates24/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Templates25/main.cpp b/regression/cbmc-cpp/Templates25/main.cpp new file mode 100644 index 00000000000..10ed4f3c53e --- /dev/null +++ b/regression/cbmc-cpp/Templates25/main.cpp @@ -0,0 +1,12 @@ +#include +template +bool True() +{ + return true; +} + +int main() +{ + bool result = True(); + assert(result == true); +} diff --git a/regression/cbmc-cpp/Templates25/test.desc b/regression/cbmc-cpp/Templates25/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Templates25/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Templates26/main.cpp b/regression/cbmc-cpp/Templates26/main.cpp new file mode 100644 index 00000000000..e23afb7d00a --- /dev/null +++ b/regression/cbmc-cpp/Templates26/main.cpp @@ -0,0 +1,19 @@ +#include + +template +struct A +{ + int func(); +}; + +template +int A::func() +{ + return C; +} + +int main() +{ + A<12> a; + assert(a.func() == 12); +} diff --git a/regression/cbmc-cpp/Templates26/test.desc b/regression/cbmc-cpp/Templates26/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Templates26/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Templates27/main.cpp b/regression/cbmc-cpp/Templates27/main.cpp new file mode 100644 index 00000000000..69db147d85a --- /dev/null +++ b/regression/cbmc-cpp/Templates27/main.cpp @@ -0,0 +1,31 @@ +#include + +template +struct C +{ + T2 i; + C() : i(10) + { + } +}; + +template +void check9() +{ + assert(v == 9); +} + +template +void check10() +{ + assert(v == 10); +} + +int main() +{ + C c; + assert(c.i == 10); + + check9(); + check10<>(); +} diff --git a/regression/cpp-from-CVS/Templates6/test.desc b/regression/cbmc-cpp/Templates27/test.desc similarity index 100% rename from regression/cpp-from-CVS/Templates6/test.desc rename to regression/cbmc-cpp/Templates27/test.desc diff --git a/regression/cbmc-cpp/Templates28/main.cpp b/regression/cbmc-cpp/Templates28/main.cpp new file mode 100644 index 00000000000..88cec087894 --- /dev/null +++ b/regression/cbmc-cpp/Templates28/main.cpp @@ -0,0 +1,22 @@ +#include + +template +struct A +{ + int func() + { + return c1; + } +}; + +template +struct B +{ + A a; +}; + +int main() +{ + B<5, 4> b; + assert(b.a.func() == 14); +} diff --git a/regression/cbmc-cpp/Templates28/test.desc b/regression/cbmc-cpp/Templates28/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Templates28/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Templates29/main.cpp b/regression/cbmc-cpp/Templates29/main.cpp new file mode 100644 index 00000000000..7fae96891ca --- /dev/null +++ b/regression/cbmc-cpp/Templates29/main.cpp @@ -0,0 +1,28 @@ +namespace N +{ +template +struct A +{ + T i; + A(T i) : i(i) + { + } +}; +} // namespace N + +struct B : N::A +{ + B(int i) : N::A(i) + { + } + void func() + { + } + int b; +}; + +int main() +{ + B b(10); + assert(b.i == 10); +} diff --git a/regression/cpp-from-CVS/Templates9/test.desc b/regression/cbmc-cpp/Templates29/test.desc similarity index 100% rename from regression/cpp-from-CVS/Templates9/test.desc rename to regression/cbmc-cpp/Templates29/test.desc diff --git a/regression/cbmc-cpp/Templates3/main.cpp b/regression/cbmc-cpp/Templates3/main.cpp new file mode 100644 index 00000000000..7b47a7488e3 --- /dev/null +++ b/regression/cbmc-cpp/Templates3/main.cpp @@ -0,0 +1,19 @@ +#include +template +class int_array +{ +public: + int array[size]; + + int read(unsigned int x) + { + assert(x < size); + return array[x]; + } +}; + +int main() +{ + int_array<3> a; + a.read(2); +} diff --git a/regression/cbmc-cpp/Templates3/test.desc b/regression/cbmc-cpp/Templates3/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Templates3/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Templates30/main.cpp b/regression/cbmc-cpp/Templates30/main.cpp new file mode 100644 index 00000000000..738cce20f3f --- /dev/null +++ b/regression/cbmc-cpp/Templates30/main.cpp @@ -0,0 +1,19 @@ +#include +template +struct A +{ + T1 t; + + template + void set(T2 t) + { + this->t = t; + } +}; + +int main() +{ + A a; + a.set(0); + assert(a.t == false); +}; diff --git a/regression/cbmc-cpp/Templates30/test.desc b/regression/cbmc-cpp/Templates30/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/Templates30/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Templates31/main.cpp b/regression/cbmc-cpp/Templates31/main.cpp new file mode 100644 index 00000000000..9c95aaf4c21 --- /dev/null +++ b/regression/cbmc-cpp/Templates31/main.cpp @@ -0,0 +1,18 @@ +#include + +template +struct C +{ + static const char *k; +}; + +template +const char *C::k = "C"; + +int main(int argc, char *argv[]) +{ + assert(C::k[0] == 'C'); + assert(C::k[0] == 'C'); + assert(&C::k != &C::k); + return 0; +} diff --git a/regression/cpp-from-CVS/Temporary1/test.desc b/regression/cbmc-cpp/Templates31/test.desc similarity index 100% rename from regression/cpp-from-CVS/Temporary1/test.desc rename to regression/cbmc-cpp/Templates31/test.desc diff --git a/regression/cbmc-cpp/Templates32/main.cpp b/regression/cbmc-cpp/Templates32/main.cpp new file mode 100644 index 00000000000..75755149407 --- /dev/null +++ b/regression/cbmc-cpp/Templates32/main.cpp @@ -0,0 +1,24 @@ +#include + +enum argt +{ + ONE, + TWO +}; + +template +class A +{ +public: + A() : v(V) + { + } + T v; +}; + +int main() +{ + A<> a; + assert(a.v == TWO); + return 0; +} diff --git a/regression/cpp-from-CVS/Temporary2/test.desc b/regression/cbmc-cpp/Templates32/test.desc similarity index 100% rename from regression/cpp-from-CVS/Temporary2/test.desc rename to regression/cbmc-cpp/Templates32/test.desc diff --git a/regression/cbmc-cpp/Templates34/main.cpp b/regression/cbmc-cpp/Templates34/main.cpp new file mode 100644 index 00000000000..1c78edc92b4 --- /dev/null +++ b/regression/cbmc-cpp/Templates34/main.cpp @@ -0,0 +1,25 @@ +// tag only, but with default parameter +template +class my_template1; + +// body, but without default parameter +template +class my_template1 +{ +}; + +// should work! +my_template1 some_instance1; + +// tag only, no default parameter +template +class my_template2; + +// body, but without default parameter +template +class my_template2 +{ +}; + +// should work! +my_template2 some_instance2; diff --git a/regression/cpp-from-CVS/Typecast2/test.desc b/regression/cbmc-cpp/Templates34/test.desc similarity index 100% rename from regression/cpp-from-CVS/Typecast2/test.desc rename to regression/cbmc-cpp/Templates34/test.desc diff --git a/regression/cbmc-cpp/Templates35/main.cpp b/regression/cbmc-cpp/Templates35/main.cpp new file mode 100644 index 00000000000..42db024c9f6 --- /dev/null +++ b/regression/cbmc-cpp/Templates35/main.cpp @@ -0,0 +1,39 @@ +#include + +template +class X +{ +public: + // the :: should trigger elaboration of Z + enum + { + e = T::e + }; +}; + +template +class Y : public X +{ +public: + enum + { + e = X::e + }; +}; + +template +class Z +{ +public: + enum + { + e = 1 + }; +}; + +Y> y; + +int main() +{ + assert(y.e == 1); +} diff --git a/regression/cpp-from-CVS/Vector1/test.desc b/regression/cbmc-cpp/Templates35/test.desc similarity index 100% rename from regression/cpp-from-CVS/Vector1/test.desc rename to regression/cbmc-cpp/Templates35/test.desc diff --git a/regression/cpp-from-CVS/Templates36/main.cpp b/regression/cbmc-cpp/Templates36/main.cpp similarity index 100% rename from regression/cpp-from-CVS/Templates36/main.cpp rename to regression/cbmc-cpp/Templates36/main.cpp diff --git a/regression/cpp-from-CVS/extractbits1/test.desc b/regression/cbmc-cpp/Templates36/test.desc similarity index 100% rename from regression/cpp-from-CVS/extractbits1/test.desc rename to regression/cbmc-cpp/Templates36/test.desc diff --git a/regression/cbmc-cpp/Templates4/main.cpp b/regression/cbmc-cpp/Templates4/main.cpp new file mode 100644 index 00000000000..3ed3f0bbda2 --- /dev/null +++ b/regression/cbmc-cpp/Templates4/main.cpp @@ -0,0 +1,39 @@ +#include + +class T1 +{ +public: + // a template member function + template + T2 f(T2 x) + { + t = true; + return x; + } + + void g() + { + assert(2 == f(2)); + } + + void h() + { + assert(3 == f(3)); + } + + bool t; + T1() : t(false) + { + } +}; + +int main() +{ + T1 x; + + x.g(); + assert(1 == x.f(1)); + assert(true == x.f(true)); + assert(x.t == true); + x.h(); +} diff --git a/regression/cpp-from-CVS/initialization2/test.desc b/regression/cbmc-cpp/Templates4/test.desc similarity index 100% rename from regression/cpp-from-CVS/initialization2/test.desc rename to regression/cbmc-cpp/Templates4/test.desc diff --git a/regression/cbmc-cpp/Templates5/main.cpp b/regression/cbmc-cpp/Templates5/main.cpp new file mode 100644 index 00000000000..3b9c81064c0 --- /dev/null +++ b/regression/cbmc-cpp/Templates5/main.cpp @@ -0,0 +1,23 @@ +template +class Y +{ +public: + void f() + { + T::A++; // T::A is not a type name! + } +}; + +class B +{ +public: + static int A; +}; + +int B::A = 0; +int main() +{ + Y y; + y.f(); + assert(B::A == 1); +} diff --git a/regression/cpp-from-CVS/initialization4/test.desc b/regression/cbmc-cpp/Templates5/test.desc similarity index 100% rename from regression/cpp-from-CVS/initialization4/test.desc rename to regression/cbmc-cpp/Templates5/test.desc diff --git a/regression/cbmc-cpp/Templates6/main.cpp b/regression/cbmc-cpp/Templates6/main.cpp new file mode 100644 index 00000000000..226fe7a7daa --- /dev/null +++ b/regression/cbmc-cpp/Templates6/main.cpp @@ -0,0 +1,51 @@ +#include + +int g; + +template +struct A +{ + T t; + ~A() + { + g++; + } +}; + +struct B +{ + B() + { + g = 10; + } + ~B() + { + g = 20; + } +}; + +struct C +{ + A a; +}; + +struct D : A +{ +}; + +int main() +{ + { + C c; + assert(g == 10); + } + + assert(g == 20); + + { + D d; + assert(g == 10); + } + + assert(g == 20); +} diff --git a/regression/cpp-from-CVS/initialization7/test.desc b/regression/cbmc-cpp/Templates6/test.desc similarity index 100% rename from regression/cpp-from-CVS/initialization7/test.desc rename to regression/cbmc-cpp/Templates6/test.desc diff --git a/regression/cbmc-cpp/Templates8/main.cpp b/regression/cbmc-cpp/Templates8/main.cpp new file mode 100644 index 00000000000..c7f9c5884fd --- /dev/null +++ b/regression/cbmc-cpp/Templates8/main.cpp @@ -0,0 +1,16 @@ +#include + +template +struct A +{ + static T some_function(T v) + { + return v; + } +}; + +int main() +{ + int v = A::some_function(10); + assert(v == 10); +} diff --git a/regression/cpp-from-CVS/namespace2/test.desc b/regression/cbmc-cpp/Templates8/test.desc similarity index 100% rename from regression/cpp-from-CVS/namespace2/test.desc rename to regression/cbmc-cpp/Templates8/test.desc diff --git a/regression/cbmc-cpp/Templates9/main.cpp b/regression/cbmc-cpp/Templates9/main.cpp new file mode 100644 index 00000000000..42450cf8077 --- /dev/null +++ b/regression/cbmc-cpp/Templates9/main.cpp @@ -0,0 +1,53 @@ +#include + +template +struct A +{ + static const int a = 0; +}; + +// specialization to int +template <> +struct A +{ + static const int a = 1; +}; + +// specialization to char +template <> +struct A +{ + static const int a = 2; +}; + +// specialization to signed char +template <> +struct A +{ + static const int a = 3; +}; + +// specialization to unsigned char +template <> +struct A +{ + static const int a = 4; +}; + +int main() +{ + A obj0; // general one + assert(obj0.a == 0); + + A obj1; // specialized + assert(obj1.a == 1); + + A obj2; // specialized + assert(obj2.a == 2); + + A obj3; // specialized + assert(obj3.a == 3); + + A obj4; // specialized + assert(obj4.a == 4); +} diff --git a/regression/cpp-from-CVS/union1/test.desc b/regression/cbmc-cpp/Templates9/test.desc similarity index 100% rename from regression/cpp-from-CVS/union1/test.desc rename to regression/cbmc-cpp/Templates9/test.desc diff --git a/regression/cbmc-cpp/Temporary1/main.cpp b/regression/cbmc-cpp/Temporary1/main.cpp new file mode 100644 index 00000000000..3aa7026d9e2 --- /dev/null +++ b/regression/cbmc-cpp/Temporary1/main.cpp @@ -0,0 +1,9 @@ +int f(const int &i) +{ + assert(i == 1); +} + +int main() +{ + f(1); +} diff --git a/regression/cpp-from-CVS/virtual1/test.desc b/regression/cbmc-cpp/Temporary1/test.desc similarity index 100% rename from regression/cpp-from-CVS/virtual1/test.desc rename to regression/cbmc-cpp/Temporary1/test.desc diff --git a/regression/cbmc-cpp/Temporary2/main.cpp b/regression/cbmc-cpp/Temporary2/main.cpp new file mode 100644 index 00000000000..761d2344ca2 --- /dev/null +++ b/regression/cbmc-cpp/Temporary2/main.cpp @@ -0,0 +1,25 @@ +class X +{ +public: + X() + { + } + + X(int i) : z(i) + { + } + + int z; +}; + +void doit() +{ + X x; + + x = X(1); +} + +int main() +{ + doit(); +} diff --git a/regression/cpp-from-CVS/virtual13/test.desc b/regression/cbmc-cpp/Temporary2/test.desc similarity index 100% rename from regression/cpp-from-CVS/virtual13/test.desc rename to regression/cbmc-cpp/Temporary2/test.desc diff --git a/regression/cbmc-cpp/Typecast1/main.cpp b/regression/cbmc-cpp/Typecast1/main.cpp new file mode 100644 index 00000000000..6eaf5efae6e --- /dev/null +++ b/regression/cbmc-cpp/Typecast1/main.cpp @@ -0,0 +1,6 @@ +int main() +{ + const int *p; + + p = (int *)0; +} diff --git a/regression/cpp-from-CVS/Constructor13/test.desc b/regression/cbmc-cpp/Typecast1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Constructor13/test.desc rename to regression/cbmc-cpp/Typecast1/test.desc diff --git a/regression/cbmc-cpp/Typecast2/main.cpp b/regression/cbmc-cpp/Typecast2/main.cpp new file mode 100644 index 00000000000..25254de115d --- /dev/null +++ b/regression/cbmc-cpp/Typecast2/main.cpp @@ -0,0 +1,21 @@ +struct myA +{ + int i; +}; + +struct myB : myA +{ + int j; +}; + +int main() +{ + myA a; + myB b; + + b.j = 11; + *(myA *)(&b) = a; + + assert(b.j == 11); + assert(b.i == a.i); +} diff --git a/regression/cpp-from-CVS/virtual14/test.desc b/regression/cbmc-cpp/Typecast2/test.desc similarity index 100% rename from regression/cpp-from-CVS/virtual14/test.desc rename to regression/cbmc-cpp/Typecast2/test.desc diff --git a/regression/cbmc-cpp/Typedef2/main.cpp b/regression/cbmc-cpp/Typedef2/main.cpp new file mode 100644 index 00000000000..2c1fe21194c --- /dev/null +++ b/regression/cbmc-cpp/Typedef2/main.cpp @@ -0,0 +1,27 @@ +struct A +{ + int i; +}; + +struct B : A +{ + typedef A _A; + int i; + void set(int i) + { + _A::i = i; + } + int get() + { + return _A::i; + } +}; + +int main() +{ + B b; + b.i = 0; + b.set(3); + assert(b.i == 0); + assert(b.get() == 3); +} diff --git a/regression/cpp-from-CVS/virtual15/test.desc b/regression/cbmc-cpp/Typedef2/test.desc similarity index 100% rename from regression/cpp-from-CVS/virtual15/test.desc rename to regression/cbmc-cpp/Typedef2/test.desc diff --git a/regression/cbmc-cpp/Typedef3/main.cpp b/regression/cbmc-cpp/Typedef3/main.cpp new file mode 100644 index 00000000000..b3b511e63a4 --- /dev/null +++ b/regression/cbmc-cpp/Typedef3/main.cpp @@ -0,0 +1,14 @@ + +struct B +{ + typedef struct + { + typedef int INT; + } A; +}; + +int main() +{ + B::A::INT i = 1; + assert(i == 1); +} diff --git a/regression/cpp-from-CVS/virtual4/test.desc b/regression/cbmc-cpp/Typedef3/test.desc similarity index 100% rename from regression/cpp-from-CVS/virtual4/test.desc rename to regression/cbmc-cpp/Typedef3/test.desc diff --git a/regression/cpp-from-CVS/Vector1/lib/container b/regression/cbmc-cpp/Vector1/lib/container similarity index 100% rename from regression/cpp-from-CVS/Vector1/lib/container rename to regression/cbmc-cpp/Vector1/lib/container diff --git a/regression/cpp-from-CVS/Vector1/lib/iterator b/regression/cbmc-cpp/Vector1/lib/iterator similarity index 100% rename from regression/cpp-from-CVS/Vector1/lib/iterator rename to regression/cbmc-cpp/Vector1/lib/iterator diff --git a/regression/cpp-from-CVS/Vector1/lib/list b/regression/cbmc-cpp/Vector1/lib/list similarity index 100% rename from regression/cpp-from-CVS/Vector1/lib/list rename to regression/cbmc-cpp/Vector1/lib/list diff --git a/regression/cpp-from-CVS/Vector1/lib/vector b/regression/cbmc-cpp/Vector1/lib/vector similarity index 100% rename from regression/cpp-from-CVS/Vector1/lib/vector rename to regression/cbmc-cpp/Vector1/lib/vector diff --git a/regression/cbmc-cpp/Vector1/main.cpp b/regression/cbmc-cpp/Vector1/main.cpp new file mode 100644 index 00000000000..ef7c4fbf29a --- /dev/null +++ b/regression/cbmc-cpp/Vector1/main.cpp @@ -0,0 +1,51 @@ +#include +using namespace std; + +/* +void sort(vector& c) +{ + if (c.begin() == c.end()) return; + + for(int i=0; i < c.size(); i++) + { + for(vector::iterator it = c.begin(); + it < c.end() ; + it++) + { + vector::iterator it_inc = it; + it_inc++; + + if(it_inc == c.end()) + break; + + if(it_inc < it) + { + vector::value_type tmp = * it; + *it = *it_inc; + *it_inc = tmp; + } + } + } +} +*/ +int main() +{ + vector vec; + vec.resize(0); + __CPROVER_assert(vec.size() == 0, "vec size == 0"); + /* vec.push_back(2); + vec.push_back(1); + vec.push_back(4); + + sort(vec); + + for(vector::iterator it = vec.begin(); it < vec.end(); it++) + { + vector::iterator it_inc = it; + it_inc++; + + if(it_inc == vec.end()) break; + __CPROVER_assert(*it <= *it_inc, "sorting error"); + } +*/ +} diff --git a/regression/cbmc-cpp/Vector1/test.desc b/regression/cbmc-cpp/Vector1/test.desc new file mode 100644 index 00000000000..6666d172f47 --- /dev/null +++ b/regression/cbmc-cpp/Vector1/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/Zero_Initializer1/main.cpp b/regression/cbmc-cpp/Zero_Initializer1/main.cpp new file mode 100644 index 00000000000..f5d70022383 --- /dev/null +++ b/regression/cbmc-cpp/Zero_Initializer1/main.cpp @@ -0,0 +1,25 @@ +int g; +int **p; + +struct +{ + int m; +} s; + +struct B +{ + static int x; +}; + +int B::x; + +char a[10]; + +int main() +{ + assert(g == 0); + assert(p == 0); + assert(s.m == 0); + assert(a[3] == 0); + assert(B::x == 0); +} diff --git a/regression/cbmc-cpp/Zero_Initializer1/test.desc b/regression/cbmc-cpp/Zero_Initializer1/test.desc new file mode 100644 index 00000000000..6666d172f47 --- /dev/null +++ b/regression/cbmc-cpp/Zero_Initializer1/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/argv1/main.cpp b/regression/cbmc-cpp/argv1/main.cpp new file mode 100644 index 00000000000..d0543ffb9fe --- /dev/null +++ b/regression/cbmc-cpp/argv1/main.cpp @@ -0,0 +1,11 @@ +#include +int main(int argc, char **argv) +{ + char *x; + + // there must be at least one + x = argv[0]; + + // last one must be NULL + assert(argv[argc] == 0); +} diff --git a/regression/cbmc-cpp/argv1/test.desc b/regression/cbmc-cpp/argv1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/argv1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/const_cast1/main.cpp b/regression/cbmc-cpp/const_cast1/main.cpp new file mode 100644 index 00000000000..e2d8d21827d --- /dev/null +++ b/regression/cbmc-cpp/const_cast1/main.cpp @@ -0,0 +1,12 @@ +#include +int main() +{ + int i = 10; + const int &ri = i; + const_cast(ri) = 11; + assert(i == 11); + + const int *pi = &i; + *const_cast(pi) = 12; + assert(i == 12); +} diff --git a/regression/cbmc-cpp/const_cast1/test.desc b/regression/cbmc-cpp/const_cast1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/const_cast1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/extractbits1/main.cpp b/regression/cbmc-cpp/extractbits1/main.cpp new file mode 100644 index 00000000000..19089e10ba6 --- /dev/null +++ b/regression/cbmc-cpp/extractbits1/main.cpp @@ -0,0 +1,17 @@ +// Note: systemc builtin extension +// require the cpp frontend to be compiled with the CPP_SYSTEMC_EXTENSION flag +int main() +{ + unsigned a = 6; + unsigned b = 12; + unsigned a21 = a.range(2, 1); + unsigned b32 = b.range(3, 2); + assert(a21 == b32); + + a.range(4, 3) = a.range(2, 1); + assert(a.range(4, 3) == b.range(3, 2)); + + a[0] = b.range(3, 3); + bool a0 = a[0]; + assert(a0 == true); +} diff --git a/regression/cbmc-cpp/extractbits1/test.desc b/regression/cbmc-cpp/extractbits1/test.desc new file mode 100644 index 00000000000..6666d172f47 --- /dev/null +++ b/regression/cbmc-cpp/extractbits1/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/for1/main.cpp b/regression/cbmc-cpp/for1/main.cpp new file mode 100644 index 00000000000..4e0e458b6f4 --- /dev/null +++ b/regression/cbmc-cpp/for1/main.cpp @@ -0,0 +1,9 @@ +#include +int main() +{ + int i; + for(i = 0; i < 10; i++) + { + assert(i < 10); + } +} diff --git a/regression/cbmc-cpp/for1/test.desc b/regression/cbmc-cpp/for1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/for1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/initialization1/main.cpp b/regression/cbmc-cpp/initialization1/main.cpp new file mode 100644 index 00000000000..4168d8e3ad1 --- /dev/null +++ b/regression/cbmc-cpp/initialization1/main.cpp @@ -0,0 +1,29 @@ +int g1; + +class One +{ +public: + int o; + One() : o(1) + { + } +}; + +class A +{ +public: + static One one; + A() + { + assert(one.o == 1); + } +}; + +One A::one; + +int main() +{ + assert(g1 == 0); + + A a; +} diff --git a/regression/cbmc-cpp/initialization1/test.desc b/regression/cbmc-cpp/initialization1/test.desc new file mode 100644 index 00000000000..6666d172f47 --- /dev/null +++ b/regression/cbmc-cpp/initialization1/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/initialization2/main.cpp b/regression/cbmc-cpp/initialization2/main.cpp new file mode 100644 index 00000000000..2ec70313f21 --- /dev/null +++ b/regression/cbmc-cpp/initialization2/main.cpp @@ -0,0 +1,21 @@ +class A +{ +public: + int a; + int b; + A(const A &r) + { + b = ~r.b; + } + A(){}; +}; + +A a1; +A a2 = a1; +int main() +{ + assert(a1.a == 0); + assert(a2.a == 0); + assert(a1.b == 0); + assert(a2.b == ~0); +}; diff --git a/regression/cbmc-cpp/initialization2/test.desc b/regression/cbmc-cpp/initialization2/test.desc new file mode 100644 index 00000000000..6666d172f47 --- /dev/null +++ b/regression/cbmc-cpp/initialization2/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/initialization3/main.cpp b/regression/cbmc-cpp/initialization3/main.cpp new file mode 100644 index 00000000000..d30b53eb925 --- /dev/null +++ b/regression/cbmc-cpp/initialization3/main.cpp @@ -0,0 +1,15 @@ +#include +class A +{ +public: + int i; + A() + { + } +}; + +int main() +{ + A a; + assert(a.i == 0); +} diff --git a/regression/cbmc-cpp/initialization3/test.desc b/regression/cbmc-cpp/initialization3/test.desc new file mode 100644 index 00000000000..9cae882a31f --- /dev/null +++ b/regression/cbmc-cpp/initialization3/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/initialization4/main.cpp b/regression/cbmc-cpp/initialization4/main.cpp new file mode 100644 index 00000000000..cc818f64b3f --- /dev/null +++ b/regression/cbmc-cpp/initialization4/main.cpp @@ -0,0 +1,15 @@ +int g; + +int gen() +{ + return g++; +} + +const int b = gen(); +const int a = gen(); + +int main() +{ + assert(a == 1); + assert(b == 0); +} diff --git a/regression/cbmc-cpp/initialization4/test.desc b/regression/cbmc-cpp/initialization4/test.desc new file mode 100644 index 00000000000..6666d172f47 --- /dev/null +++ b/regression/cbmc-cpp/initialization4/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/initialization5/main.cpp b/regression/cbmc-cpp/initialization5/main.cpp new file mode 100644 index 00000000000..3c5bf63f7cd --- /dev/null +++ b/regression/cbmc-cpp/initialization5/main.cpp @@ -0,0 +1,16 @@ +#include +int a[__CPROVER::constant_infinity_uint]; + +struct A +{ + int i[__CPROVER::constant_infinity_uint]; +}; + +A o; + +int main() +{ + unsigned x; + assert(o.i[x] == 0); + assert(a[x] == 0); +} diff --git a/regression/cbmc-cpp/initialization5/test.desc b/regression/cbmc-cpp/initialization5/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/initialization5/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/initialization6/main.cpp b/regression/cbmc-cpp/initialization6/main.cpp new file mode 100644 index 00000000000..79c8cd0acf3 --- /dev/null +++ b/regression/cbmc-cpp/initialization6/main.cpp @@ -0,0 +1,6 @@ +extern "C" int g; + +int main() +{ + assert(g == 0); +} diff --git a/regression/cpp-from-CVS/initialization6/test.desc b/regression/cbmc-cpp/initialization6/test.desc similarity index 100% rename from regression/cpp-from-CVS/initialization6/test.desc rename to regression/cbmc-cpp/initialization6/test.desc diff --git a/regression/cpp-from-CVS/initialization7/main.cpp b/regression/cbmc-cpp/initialization7/main.cpp similarity index 100% rename from regression/cpp-from-CVS/initialization7/main.cpp rename to regression/cbmc-cpp/initialization7/main.cpp diff --git a/regression/cbmc-cpp/initialization7/test.desc b/regression/cbmc-cpp/initialization7/test.desc new file mode 100644 index 00000000000..6666d172f47 --- /dev/null +++ b/regression/cbmc-cpp/initialization7/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/lvalue2/main.cpp b/regression/cbmc-cpp/lvalue2/main.cpp new file mode 100644 index 00000000000..7a42954effd --- /dev/null +++ b/regression/cbmc-cpp/lvalue2/main.cpp @@ -0,0 +1,32 @@ +struct A +{ + int i; + A() : i(0) + { + } + int get_i() + { + return i; + } +}; + +A factory() +{ + return A(); +} + +int main() +{ + // Altough the returned value of `factory' is an + // rvalue, gcc accepts to bind it to the `this' + // parameter of the method `get_i'. Note that when used, + // a returned value is stored in a temporary + // (see goto_convertt::remove_function_call). Thus, + // the value returned by a function call can be treated + // as an lvalue. + // + // It's not clear what the best is. Should this code be rejected? + // Is the compatibility with gcc more important? + + assert(factory().get_i() == 0); +} diff --git a/regression/cbmc-cpp/lvalue2/test.desc b/regression/cbmc-cpp/lvalue2/test.desc new file mode 100644 index 00000000000..6666d172f47 --- /dev/null +++ b/regression/cbmc-cpp/lvalue2/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/namespace1/main.cpp b/regression/cbmc-cpp/namespace1/main.cpp new file mode 100644 index 00000000000..00b8367be9c --- /dev/null +++ b/regression/cbmc-cpp/namespace1/main.cpp @@ -0,0 +1,31 @@ +#include + +namespace test_space +{ +int i; +} + +int test_space::j; + +void f() +{ + ::test_space::i = 0; +} + +namespace test_space +{ +void g() +{ + i = 1; + j = 2; +} +} // namespace test_space + +using namespace test_space; + +int main() +{ + f(); + j = 1; + assert(i == 0); +} diff --git a/regression/cbmc-cpp/namespace1/test.desc b/regression/cbmc-cpp/namespace1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/namespace1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/namespace2/main.cpp b/regression/cbmc-cpp/namespace2/main.cpp new file mode 100644 index 00000000000..5ff4e959545 --- /dev/null +++ b/regression/cbmc-cpp/namespace2/main.cpp @@ -0,0 +1,21 @@ +#include + +namespace N +{ +template +struct A +{ + T t; + A(T t) : t(t) + { + } +}; +} // namespace N + +using N::A; + +int main() +{ + A a(true); + assert(a.t == true); +} diff --git a/regression/cbmc-cpp/namespace2/test.desc b/regression/cbmc-cpp/namespace2/test.desc new file mode 100644 index 00000000000..6666d172f47 --- /dev/null +++ b/regression/cbmc-cpp/namespace2/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/namespace3/main.cpp b/regression/cbmc-cpp/namespace3/main.cpp new file mode 100644 index 00000000000..f7d44157fce --- /dev/null +++ b/regression/cbmc-cpp/namespace3/main.cpp @@ -0,0 +1,15 @@ +#include +namespace std +{ +struct A +{ + int i; +}; +} // namespace std + +std::A a; + +int main(int argc, char *argv[]) +{ + assert(a.i == 0); +} diff --git a/regression/cbmc-cpp/namespace3/test.desc b/regression/cbmc-cpp/namespace3/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/namespace3/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/new1/main.cpp b/regression/cbmc-cpp/new1/main.cpp new file mode 100644 index 00000000000..599050824d4 --- /dev/null +++ b/regression/cbmc-cpp/new1/main.cpp @@ -0,0 +1,30 @@ +#include +void single_object() +{ + int *p; + + p = new int(2); + + assert(*p == 2); + + delete p; +} + +void array() +{ + int *q; + + q = new int[100]; + + q[50] = 1; + + // _must_ use delete[] here + delete[] q; +} + +int main() +{ + single_object(); + array(); + return 0; +} diff --git a/regression/cbmc-cpp/new1/test.desc b/regression/cbmc-cpp/new1/test.desc new file mode 100644 index 00000000000..404ace834a8 --- /dev/null +++ b/regression/cbmc-cpp/new1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp +--pointer-check +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/operators/main.cpp b/regression/cbmc-cpp/operators/main.cpp new file mode 100644 index 00000000000..f5e2e67eed7 --- /dev/null +++ b/regression/cbmc-cpp/operators/main.cpp @@ -0,0 +1,52 @@ +#include +class I +{ + int i; + +public: + int get() + { + return i; + } + void set(int i) + { + this->i = i; + } + I &operator<<=(const I &ref) + { + i <<= ref.i; + return *this; + } + I &operator>>=(const I &ref) + { + i >>= ref.i; + return *this; + } + I &operator+=(const I &ref) + { + i += ref.i; + return *this; + } + I &operator-=(const I &ref) + { + i -= ref.i; + return *this; + } +}; + +int main() +{ + I i1, i2; + i1.set(1); + i2.set(2); + i2 += i1; + assert(i2.get() == 3); + i2 -= i1; + assert(i2.get() == 2); + i2 <<= i1; + assert(i2.get() == 4); + i2 >>= i1; + assert(i2.get() == 2); + i2 = i1; + assert(i2.get() == 1); +} diff --git a/regression/cbmc-cpp/operators/test.desc b/regression/cbmc-cpp/operators/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/operators/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/reinterpret_cast1/main.cpp b/regression/cbmc-cpp/reinterpret_cast1/main.cpp new file mode 100644 index 00000000000..fcbf192f3f0 --- /dev/null +++ b/regression/cbmc-cpp/reinterpret_cast1/main.cpp @@ -0,0 +1,10 @@ +#include +int main() +{ + int v = 256; + int *i = &v; + char *c = reinterpret_cast(i); + *c == 0; + int *j = reinterpret_cast(c); + assert(j == i); +} diff --git a/regression/cbmc-cpp/reinterpret_cast1/test.desc b/regression/cbmc-cpp/reinterpret_cast1/test.desc new file mode 100644 index 00000000000..89db603c00c --- /dev/null +++ b/regression/cbmc-cpp/reinterpret_cast1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp +--little-endian +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/reinterpret_cast2/main.cpp b/regression/cbmc-cpp/reinterpret_cast2/main.cpp new file mode 100644 index 00000000000..ded02adc047 --- /dev/null +++ b/regression/cbmc-cpp/reinterpret_cast2/main.cpp @@ -0,0 +1,14 @@ +struct A +{ + int *pi; +}; + +int main() +{ + A a; + const A *cpa = &a; + + int *ptr = reinterpret_cast(cpa->pi); + + return 0; +} diff --git a/regression/cpp-from-CVS/Constructor15/test.desc b/regression/cbmc-cpp/reinterpret_cast2/test.desc similarity index 100% rename from regression/cpp-from-CVS/Constructor15/test.desc rename to regression/cbmc-cpp/reinterpret_cast2/test.desc diff --git a/regression/cbmc-cpp/static_cast1/main.cpp b/regression/cbmc-cpp/static_cast1/main.cpp new file mode 100644 index 00000000000..b7061f12681 --- /dev/null +++ b/regression/cbmc-cpp/static_cast1/main.cpp @@ -0,0 +1,10 @@ +#include +int main() +{ + // this is ok + double xd = 2.3; + + int xi = static_cast(xd); + + assert(xi == 2); +} diff --git a/regression/cbmc-cpp/static_cast1/test.desc b/regression/cbmc-cpp/static_cast1/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/static_cast1/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cpp-from-CVS/static_cast2/main.cpp b/regression/cbmc-cpp/static_cast2/main.cpp similarity index 100% rename from regression/cpp-from-CVS/static_cast2/main.cpp rename to regression/cbmc-cpp/static_cast2/main.cpp diff --git a/regression/cpp-from-CVS/Reference5/test.desc b/regression/cbmc-cpp/static_cast2/test.desc similarity index 100% rename from regression/cpp-from-CVS/Reference5/test.desc rename to regression/cbmc-cpp/static_cast2/test.desc diff --git a/regression/cbmc-cpp/static_cast3/main.cpp b/regression/cbmc-cpp/static_cast3/main.cpp new file mode 100644 index 00000000000..9f84bca968e --- /dev/null +++ b/regression/cbmc-cpp/static_cast3/main.cpp @@ -0,0 +1,28 @@ +#include +struct A +{ + int i; +}; + +struct B +{ + char j; +}; + +struct C : A, B +{ + bool k; +}; + +int main() +{ + C c; + c.k = true; + + B &b = c; + assert((static_cast(b)).k == true); + + B *pb = &c; + static_cast(pb)->k = false; + assert(c.k == false); +} diff --git a/regression/cbmc-cpp/static_cast3/test.desc b/regression/cbmc-cpp/static_cast3/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/static_cast3/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/static_cast4/main.cpp b/regression/cbmc-cpp/static_cast4/main.cpp new file mode 100644 index 00000000000..65f653772de --- /dev/null +++ b/regression/cbmc-cpp/static_cast4/main.cpp @@ -0,0 +1,14 @@ +struct A +{ + int i; +}; +struct B : A +{ + char j; +}; +int main() +{ + A a; + const A &ra = a; + static_cast(ra); // not ok +} diff --git a/regression/cpp-from-CVS/Templates15/test.desc b/regression/cbmc-cpp/static_cast4/test.desc similarity index 100% rename from regression/cpp-from-CVS/Templates15/test.desc rename to regression/cbmc-cpp/static_cast4/test.desc diff --git a/regression/cbmc-cpp/static_cast5/main.cpp b/regression/cbmc-cpp/static_cast5/main.cpp new file mode 100644 index 00000000000..99b5ce3221f --- /dev/null +++ b/regression/cbmc-cpp/static_cast5/main.cpp @@ -0,0 +1,30 @@ +#include +struct A +{ + int i; +}; + +struct B : A +{ +}; + +int get_i1(A &a) +{ + return static_cast(&a)->i; +} + +int get_i2(A *pa) +{ + return static_cast(pa)->i; +} + +int main() +{ + B b; + b.i = 10; + int tmp1 = get_i1(b); + assert(tmp1 == 10); + + int tmp2 = get_i2(&b); + assert(tmp2 == 10); +} diff --git a/regression/cbmc-cpp/static_cast5/test.desc b/regression/cbmc-cpp/static_cast5/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/static_cast5/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/struct1/main.cpp b/regression/cbmc-cpp/struct1/main.cpp new file mode 100644 index 00000000000..ef5a0cbb897 --- /dev/null +++ b/regression/cbmc-cpp/struct1/main.cpp @@ -0,0 +1,41 @@ +extern "C" typedef struct IUnknown IUnknown; + +// these are the same +struct IUnknown +{ + int asd; +}; + +int f(IUnknown *This); + +struct AA +{ + int i; +}; + +struct BBB +{ + struct asd *p; +} abc; + +struct AAA +{ + struct asd *q; +} fff; + +struct asd +{ + int z; +}; + +void f() +{ + abc.p = fff.q; +} + +int main() +{ + int z; + + z = sizeof(struct AA); +} diff --git a/regression/cpp-from-CVS/Constructor2/test.desc b/regression/cbmc-cpp/struct1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Constructor2/test.desc rename to regression/cbmc-cpp/struct1/test.desc diff --git a/regression/cbmc-cpp/typecast_ambiguity3/main.cpp b/regression/cbmc-cpp/typecast_ambiguity3/main.cpp new file mode 100644 index 00000000000..309e41c10e6 --- /dev/null +++ b/regression/cbmc-cpp/typecast_ambiguity3/main.cpp @@ -0,0 +1,13 @@ +#include + +int main() +{ + int i; + + // this is to parse as (bool(i)) & 0x1fff + // and not as bool(i&0x1fff) + + assert(sizeof((bool)(i)&0x1fff) == sizeof(int)); + + return 0; +} diff --git a/regression/cbmc-cpp/typecast_ambiguity3/test.desc b/regression/cbmc-cpp/typecast_ambiguity3/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/typecast_ambiguity3/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/typedef4/main.cpp b/regression/cbmc-cpp/typedef4/main.cpp new file mode 100644 index 00000000000..0ccd096d5cd --- /dev/null +++ b/regression/cbmc-cpp/typedef4/main.cpp @@ -0,0 +1,23 @@ +#include +struct A +{ + int i; + A(int i) : i(i) + { + } +}; + +class B : public A +{ +public: + typedef A _A; + B() : _A(0) + { + } +}; + +int main() +{ + B b; + assert(b.i == 0); +} diff --git a/regression/cbmc-cpp/typedef4/test.desc b/regression/cbmc-cpp/typedef4/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/typedef4/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/typename1/main.cpp b/regression/cbmc-cpp/typename1/main.cpp new file mode 100644 index 00000000000..b7a027cdcf6 --- /dev/null +++ b/regression/cbmc-cpp/typename1/main.cpp @@ -0,0 +1,24 @@ +class X +{ +public: + typedef int T; +}; + +template +class Y +{ +public: + typename X::T g; + + void f() + { + typename X::T l; + } +}; + +int main() +{ + Y o; + + o.g = 1; +} diff --git a/regression/cpp-from-CVS/Constructor3/test.desc b/regression/cbmc-cpp/typename1/test.desc similarity index 100% rename from regression/cpp-from-CVS/Constructor3/test.desc rename to regression/cbmc-cpp/typename1/test.desc diff --git a/regression/cbmc-cpp/typename2/main.cpp b/regression/cbmc-cpp/typename2/main.cpp new file mode 100644 index 00000000000..bfb62ca4f1f --- /dev/null +++ b/regression/cbmc-cpp/typename2/main.cpp @@ -0,0 +1,18 @@ +enum foo +{ + NOT_AFFECTED, + FATAL_AFFECT, + WARNING +}; + +typedef struct +{ + foo SeverityType; +} BitDatabaseRecordStruct; + +const BitDatabaseRecordStruct BitDataBase[1] = {{NOT_AFFECTED}}; + +int main() +{ + return 0; +} diff --git a/regression/cpp-from-CVS/Constructor4/test.desc b/regression/cbmc-cpp/typename2/test.desc similarity index 100% rename from regression/cpp-from-CVS/Constructor4/test.desc rename to regression/cbmc-cpp/typename2/test.desc diff --git a/regression/cbmc-cpp/union1/main.cpp b/regression/cbmc-cpp/union1/main.cpp new file mode 100644 index 00000000000..cd5d25610c0 --- /dev/null +++ b/regression/cbmc-cpp/union1/main.cpp @@ -0,0 +1,13 @@ +#include + +int main() +{ + // anonymous union + union { + int a; + char b; + }; + + a = 'z'; + assert(b == 'z'); +} diff --git a/regression/cbmc-cpp/union1/test.desc b/regression/cbmc-cpp/union1/test.desc new file mode 100644 index 00000000000..6666d172f47 --- /dev/null +++ b/regression/cbmc-cpp/union1/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/virtual1/main.cpp b/regression/cbmc-cpp/virtual1/main.cpp new file mode 100644 index 00000000000..1d402669650 --- /dev/null +++ b/regression/cbmc-cpp/virtual1/main.cpp @@ -0,0 +1,48 @@ +int g; + +class A +{ +public: + virtual void f() + { + g = 1; + } + + int mA; + + A(); +}; + +A::A() +{ +} + +class B : public A +{ +public: + B() + { + mB = 1; + } + + virtual void f() + { + g = 2; + mB = 3; + } + + int mB; +}; + +int main() +{ + B b; + A *p; + + p = &b; + + p->f(); + + assert(g == 2); + assert(b.mB == 3); +} diff --git a/regression/cbmc-cpp/virtual1/test.desc b/regression/cbmc-cpp/virtual1/test.desc new file mode 100644 index 00000000000..6666d172f47 --- /dev/null +++ b/regression/cbmc-cpp/virtual1/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/virtual10/main.cpp b/regression/cbmc-cpp/virtual10/main.cpp new file mode 100644 index 00000000000..5347eb527d0 --- /dev/null +++ b/regression/cbmc-cpp/virtual10/main.cpp @@ -0,0 +1,20 @@ +#include +struct A +{ + virtual bool func() const + { + return true; + } + virtual bool func() + { + return false; + } +}; + +int main() +{ + const A a1; + assert(a1.func() == true); + A a2; + assert(a2.func() == false); +} diff --git a/regression/cbmc-cpp/virtual10/test.desc b/regression/cbmc-cpp/virtual10/test.desc new file mode 100644 index 00000000000..307a2ce0d75 --- /dev/null +++ b/regression/cbmc-cpp/virtual10/test.desc @@ -0,0 +1,7 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/cbmc-cpp/virtual11/main.cpp b/regression/cbmc-cpp/virtual11/main.cpp new file mode 100644 index 00000000000..1631cc64be7 --- /dev/null +++ b/regression/cbmc-cpp/virtual11/main.cpp @@ -0,0 +1,28 @@ +struct A +{ + int i; + virtual operator int() const + { + return i; + } +}; + +struct B : A +{ + operator int() const + { + return i + 1; + } +}; + +int get_i(const A &a) +{ + return a; +} + +int main() +{ + B b; + b.i = 10; + assert(get_i(b) == 11); +} diff --git a/regression/cpp-from-CVS/virtual11/test.desc b/regression/cbmc-cpp/virtual11/test.desc similarity index 100% rename from regression/cpp-from-CVS/virtual11/test.desc rename to regression/cbmc-cpp/virtual11/test.desc diff --git a/regression/cbmc-cpp/virtual12/main.cpp b/regression/cbmc-cpp/virtual12/main.cpp new file mode 100644 index 00000000000..4a2eb256e95 --- /dev/null +++ b/regression/cbmc-cpp/virtual12/main.cpp @@ -0,0 +1,31 @@ +struct A +{ + virtual int func() + { + return 1; + } +}; + +struct B : A +{ + int func() + { + return 2; + } +}; + +int call_func1(A a) +{ + return a.func(); +} +int call_func2(A &a) +{ + return a.func(); +} + +int main() +{ + B b; + assert(call_func1(b) == 1); + assert(call_func2(b) == 2); +} diff --git a/regression/cpp-from-CVS/virtual12/test.desc b/regression/cbmc-cpp/virtual12/test.desc similarity index 100% rename from regression/cpp-from-CVS/virtual12/test.desc rename to regression/cbmc-cpp/virtual12/test.desc diff --git a/regression/cbmc-cpp/virtual13/main.cpp b/regression/cbmc-cpp/virtual13/main.cpp new file mode 100644 index 00000000000..5bd744f6fc3 --- /dev/null +++ b/regression/cbmc-cpp/virtual13/main.cpp @@ -0,0 +1,29 @@ +struct A +{ + virtual int f() + { + return 1; + } +}; +struct B +{ + virtual int f() + { + return 2; + } +}; +struct C : A, B +{ + virtual int f() + { + return 3; + } +}; + +int main(int argc, char *argv[]) +{ + C c; + C c2(c); + assert(((A &)c2).f() == ((B &)c2).f()); + return 0; +} diff --git a/regression/cbmc-cpp/virtual13/test.desc b/regression/cbmc-cpp/virtual13/test.desc new file mode 100644 index 00000000000..6666d172f47 --- /dev/null +++ b/regression/cbmc-cpp/virtual13/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/virtual14/main.cpp b/regression/cbmc-cpp/virtual14/main.cpp new file mode 100644 index 00000000000..79eb384e86f --- /dev/null +++ b/regression/cbmc-cpp/virtual14/main.cpp @@ -0,0 +1,73 @@ +struct T +{ + int x, y; +}; + +class A +{ +public: + int a; + virtual void f(T t1, T &t2) + { + t2.x = t1.x; + t2.y = t1.y; + } +}; + +class B +{ +public: + int b; + + virtual void f(T t1, T &t2) + { + t2.x = t1.y; + t2.y = t1.x; + } +}; + +class C : public A, public B +{ +public: + virtual void f(T t1, T &t2) + { + t2.x = t1.x + 1; + t2.y = t1.y + 1; + } +}; + +int main(int argc, char *argv[]) +{ + A a; + B b; + C c; + T t1, t2; + + t1.x = 10; + t1.y = 20; + + a.f(t1, t2); + assert(t2.x == t1.x && t2.y == t1.y); + t2.x = t2.y = 0; + + b.f(t1, t2); + assert(t2.x == t1.y && t2.y == t1.x); + t2.x = t2.y = 0; + + c.f(t1, t2); + assert(t2.x == t1.x + 1 && t2.y == t1.y + 1); + t2.x = t2.y = 0; + + ((A *)&c)->f(t1, t2); + assert(t2.x == t1.x + 1 && t2.y == t1.y + 1); + t2.x = t2.y = 0; + + c.b = 1; + assert(((B *)&c)->b == 1); + + ((B *)&c)->f(t1, t2); + assert(t2.x == t1.x + 1 && t2.y == t1.y + 1); + t2.x = t2.y = 0; + + return 0; +} diff --git a/regression/cbmc-cpp/virtual14/test.desc b/regression/cbmc-cpp/virtual14/test.desc new file mode 100644 index 00000000000..6666d172f47 --- /dev/null +++ b/regression/cbmc-cpp/virtual14/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/virtual15/main.cpp b/regression/cbmc-cpp/virtual15/main.cpp new file mode 100644 index 00000000000..578b4d9599e --- /dev/null +++ b/regression/cbmc-cpp/virtual15/main.cpp @@ -0,0 +1,47 @@ +// #include +// #include +struct A +{ + virtual int f() + { + return 1; + } + virtual int g() + { + return 1; + } +}; + +struct B : A +{ + int f() + { + return 2; + } +}; + +struct C : B +{ +}; + +struct D : C +{ + int g() + { + return 3; + } +}; + +int main() +{ + D d; + + assert(d.f() == 2); + assert(d.g() == 3); + assert(((C *)(&d))->f() == 2); + assert(((B *)(&d))->g() == 3); + assert(((B *)(&d))->f() == 2); + assert(((B *)(&d))->g() == 3); + assert(((A *)(&d))->f() == 2); + assert(((A *)(&d))->g() == 3); +} diff --git a/regression/cbmc-cpp/virtual15/test.desc b/regression/cbmc-cpp/virtual15/test.desc new file mode 100644 index 00000000000..6666d172f47 --- /dev/null +++ b/regression/cbmc-cpp/virtual15/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/virtual2/main.cpp b/regression/cbmc-cpp/virtual2/main.cpp new file mode 100644 index 00000000000..dd4638dde11 --- /dev/null +++ b/regression/cbmc-cpp/virtual2/main.cpp @@ -0,0 +1,29 @@ +#include +int g; + +class X +{ +public: + virtual int f(); + + int m; +}; + +int X::f() +{ + g = 10; + m = 1; +} + +class Y : public X +{ +}; + +int main() +{ + Y y; + + y.f(); + + assert(g == 10); +} diff --git a/regression/cbmc-cpp/virtual2/test.desc b/regression/cbmc-cpp/virtual2/test.desc new file mode 100644 index 00000000000..fb16a88c617 --- /dev/null +++ b/regression/cbmc-cpp/virtual2/test.desc @@ -0,0 +1,8 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/virtual3/main.cpp b/regression/cbmc-cpp/virtual3/main.cpp new file mode 100644 index 00000000000..bcdf1c6cf6e --- /dev/null +++ b/regression/cbmc-cpp/virtual3/main.cpp @@ -0,0 +1,20 @@ +class B +{ +public: + virtual int f() + { + return 0; + } +}; + +void toBr(B &b) +{ + assert(b.f() == 0); +} + +int main() +{ + B b; + // assert(b.f()==0); + toBr(b); +} diff --git a/regression/cpp-from-CVS/virtual3/test.desc b/regression/cbmc-cpp/virtual3/test.desc similarity index 100% rename from regression/cpp-from-CVS/virtual3/test.desc rename to regression/cbmc-cpp/virtual3/test.desc diff --git a/regression/cbmc-cpp/virtual4/main.cpp b/regression/cbmc-cpp/virtual4/main.cpp new file mode 100644 index 00000000000..86b2b517d64 --- /dev/null +++ b/regression/cbmc-cpp/virtual4/main.cpp @@ -0,0 +1,26 @@ +#include + +class B +{ +public: + virtual int f() + { + return 0; + } +}; + +class A : public B +{ +public: + int f() + { + return 1; + } +}; + +int main() +{ + A a; + assert(a.A::f() == 1); + assert(a.B::f() == 0); +} diff --git a/regression/cbmc-cpp/virtual4/test.desc b/regression/cbmc-cpp/virtual4/test.desc new file mode 100644 index 00000000000..6666d172f47 --- /dev/null +++ b/regression/cbmc-cpp/virtual4/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-cpp/virtual5/main.cpp b/regression/cbmc-cpp/virtual5/main.cpp new file mode 100644 index 00000000000..81ae3afbed2 --- /dev/null +++ b/regression/cbmc-cpp/virtual5/main.cpp @@ -0,0 +1,25 @@ +class B +{ +public: + virtual int f() const + { + return 0; + } +}; + +class A : public B +{ +public: + int f() + { + return 1; + } +}; + +int main() +{ + A a; + B b = (B)a; + assert(b.f() == 0); + assert(a.f() == 1); +} diff --git a/regression/cpp-from-CVS/virtual5/test.desc b/regression/cbmc-cpp/virtual5/test.desc similarity index 100% rename from regression/cpp-from-CVS/virtual5/test.desc rename to regression/cbmc-cpp/virtual5/test.desc diff --git a/regression/cbmc-cpp/virtual6/main.cpp b/regression/cbmc-cpp/virtual6/main.cpp new file mode 100644 index 00000000000..6cc8a0bf814 --- /dev/null +++ b/regression/cbmc-cpp/virtual6/main.cpp @@ -0,0 +1,33 @@ +#include + +class B +{ +public: + virtual int f() const; +}; + +class A : public B +{ +public: + int f() const; +}; + +int B::f() const +{ + return 0; +} + +int A::f() const +{ + return 1; +} + +int main() +{ + A a; + B b = (B)a; + B *pB = (B *)&a; + assert(b.f() == 0); + assert(pB->f() == 1); + assert(a.f() == 1); +} diff --git a/regression/cpp-from-CVS/virtual6/test.desc b/regression/cbmc-cpp/virtual6/test.desc similarity index 100% rename from regression/cpp-from-CVS/virtual6/test.desc rename to regression/cbmc-cpp/virtual6/test.desc diff --git a/regression/cbmc-cpp/virtual7/main.cpp b/regression/cbmc-cpp/virtual7/main.cpp new file mode 100644 index 00000000000..e6381faab8e --- /dev/null +++ b/regression/cbmc-cpp/virtual7/main.cpp @@ -0,0 +1,30 @@ +class A +{ +public: + virtual int number() + { + return 0; + } +}; + +class B : A +{ +public: + int number() + { + return 1; + } + void test() + { + int n1 = number(); + assert(n1 == 1); + int n2 = ::A::number(); + assert(n2 == 0); + } +}; + +int main() +{ + B b; + b.test(); +} diff --git a/regression/cpp-from-CVS/virtual7/test.desc b/regression/cbmc-cpp/virtual7/test.desc similarity index 100% rename from regression/cpp-from-CVS/virtual7/test.desc rename to regression/cbmc-cpp/virtual7/test.desc diff --git a/regression/cbmc-cpp/virtual8/main.cpp b/regression/cbmc-cpp/virtual8/main.cpp new file mode 100644 index 00000000000..82b0b344fa8 --- /dev/null +++ b/regression/cbmc-cpp/virtual8/main.cpp @@ -0,0 +1,28 @@ +int g1; +int g2; + +class A +{ +public: + virtual ~A() + { + g1 = g2 + 1; + } +}; + +class B : public A +{ +public: + ~B() + { + g2 = 1; + } +}; + +int main() +{ + A *pA = new B(); + delete pA; + assert(g2 == 1); + assert(g1 == 2); +} diff --git a/regression/cpp-from-CVS/virtual8/test.desc b/regression/cbmc-cpp/virtual8/test.desc similarity index 100% rename from regression/cpp-from-CVS/virtual8/test.desc rename to regression/cbmc-cpp/virtual8/test.desc diff --git a/regression/cbmc-cpp/virtual9/main.cpp b/regression/cbmc-cpp/virtual9/main.cpp new file mode 100644 index 00000000000..6d1718c7f1f --- /dev/null +++ b/regression/cbmc-cpp/virtual9/main.cpp @@ -0,0 +1,18 @@ +#include +struct A +{ + virtual int &func(int &i) + { + return i; + } +}; + +int main() +{ + A a; + int i = 0; + int j = 1; + + a.func(i) = j; + assert(i == j); +} diff --git a/regression/cbmc-cpp/virtual9/test.desc b/regression/cbmc-cpp/virtual9/test.desc new file mode 100644 index 00000000000..307a2ce0d75 --- /dev/null +++ b/regression/cbmc-cpp/virtual9/test.desc @@ -0,0 +1,7 @@ +CORE winbug macos-assert-broken +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/cbmc-incr/Ackermann02_false1/test.desc b/regression/cbmc-incr/Ackermann02_false1/test.desc index feb208278d1..fe5e0b6d27c 100644 --- a/regression/cbmc-incr/Ackermann02_false1/test.desc +++ b/regression/cbmc-incr/Ackermann02_false1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --error-label ERROR --unwind-max 6 ^EXIT=10$ diff --git a/regression/cbmc-incr/MultCommutative_true1/test.desc b/regression/cbmc-incr/MultCommutative_true1/test.desc index a907bb6415d..3e307e571fe 100644 --- a/regression/cbmc-incr/MultCommutative_true1/test.desc +++ b/regression/cbmc-incr/MultCommutative_true1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --error-label ERROR --unwind-max 6 --no-unwinding-assertions ^EXIT=0$ diff --git a/regression/cbmc-incr/alarm1/test.desc b/regression/cbmc-incr/alarm1/test.desc index 0b88cadbc06..650d3b27961 100644 --- a/regression/cbmc-incr/alarm1/test.desc +++ b/regression/cbmc-incr/alarm1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --unwind-max 25 --no-unwinding-assertions ^EXIT=0$ diff --git a/regression/cbmc-incr/alarm2/test.desc b/regression/cbmc-incr/alarm2/test.desc index 0d034169229..f51d0255b05 100644 --- a/regression/cbmc-incr/alarm2/test.desc +++ b/regression/cbmc-incr/alarm2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --unwind-min 5 --unwind-max 10 --no-unwinding-assertions ^EXIT=10$ diff --git a/regression/cbmc-incr/alarm3/test.desc b/regression/cbmc-incr/alarm3/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-incr/alarm3/test.desc +++ b/regression/cbmc-incr/alarm3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-incr/arrays2/test.desc b/regression/cbmc-incr/arrays2/test.desc index ace61c7fe7b..66f3d0a2450 100644 --- a/regression/cbmc-incr/arrays2/test.desc +++ b/regression/cbmc-incr/arrays2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --unwind-max 5 --no-unwinding-assertions --arrays-uf-always ^EXIT=10$ diff --git a/regression/cbmc-incr/arrays3/test.desc b/regression/cbmc-incr/arrays3/test.desc index e811d53f304..3beceac1239 100644 --- a/regression/cbmc-incr/arrays3/test.desc +++ b/regression/cbmc-incr/arrays3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-unwinding-assertions ^EXIT=0$ diff --git a/regression/cbmc-incr/arrays4/test.desc b/regression/cbmc-incr/arrays4/test.desc index e811d53f304..3beceac1239 100644 --- a/regression/cbmc-incr/arrays4/test.desc +++ b/regression/cbmc-incr/arrays4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-unwinding-assertions ^EXIT=0$ diff --git a/regression/cbmc-incr/arrays5/test.desc b/regression/cbmc-incr/arrays5/test.desc index c7aedd490fb..67c1665c96d 100644 --- a/regression/cbmc-incr/arrays5/test.desc +++ b/regression/cbmc-incr/arrays5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --unwind-max 5 --no-unwinding-assertions --arrays-uf-always ^EXIT=0$ diff --git a/regression/cbmc-incr/assertion-after-loop1/test.desc b/regression/cbmc-incr/assertion-after-loop1/test.desc index 3ede5ed0f72..efb176e1ccc 100644 --- a/regression/cbmc-incr/assertion-after-loop1/test.desc +++ b/regression/cbmc-incr/assertion-after-loop1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --unwind-max 10 ^EXIT=10$ diff --git a/regression/cbmc-incr/assertion-after-loop2/test.desc b/regression/cbmc-incr/assertion-after-loop2/test.desc index 7a617d1973c..f17855ff1c8 100644 --- a/regression/cbmc-incr/assertion-after-loop2/test.desc +++ b/regression/cbmc-incr/assertion-after-loop2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-unwinding-assertions --unwind-max 10 ^EXIT=0$ diff --git a/regression/cbmc-incr/cruise1/test.desc b/regression/cbmc-incr/cruise1/test.desc index 9474865a7c9..1a489aaeeff 100644 --- a/regression/cbmc-incr/cruise1/test.desc +++ b/regression/cbmc-incr/cruise1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --unwind-max 10 --no-unwinding-assertions ^EXIT=0$ diff --git a/regression/cbmc-incr/cruise2/test.desc b/regression/cbmc-incr/cruise2/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-incr/cruise2/test.desc +++ b/regression/cbmc-incr/cruise2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-incr/email_spec27_product31_false1/test.desc b/regression/cbmc-incr/email_spec27_product31_false1/test.desc index edff8ba88f3..beb86c48175 100644 --- a/regression/cbmc-incr/email_spec27_product31_false1/test.desc +++ b/regression/cbmc-incr/email_spec27_product31_false1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --error-label ERROR --unwind-max 3 ^EXIT=10$ diff --git a/regression/cbmc-incr/induction1/test.desc b/regression/cbmc-incr/induction1/test.desc index 0f773f9e2ab..5b28f0ad371 100644 --- a/regression/cbmc-incr/induction1/test.desc +++ b/regression/cbmc-incr/induction1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --stop-when-unsat --no-unwinding-assertions ^EXIT=0$ diff --git a/regression/cbmc-incr/magic1/test.desc b/regression/cbmc-incr/magic1/test.desc index d723f0ec32e..44dc9051110 100644 --- a/regression/cbmc-incr/magic1/test.desc +++ b/regression/cbmc-incr/magic1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --magic-numbers ^EXIT=0$ diff --git a/regression/cbmc-incr/minmaxunwind1/test.desc b/regression/cbmc-incr/minmaxunwind1/test.desc index 5c9b0241320..32f77897568 100644 --- a/regression/cbmc-incr/minmaxunwind1/test.desc +++ b/regression/cbmc-incr/minmaxunwind1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-unwinding-assertions --unwind-min 4 --unwind-max 6 ^EXIT=10$ diff --git a/regression/cbmc-incr/minmaxunwind2/test.desc b/regression/cbmc-incr/minmaxunwind2/test.desc index 0626ccb6645..1e5dc911cc5 100644 --- a/regression/cbmc-incr/minmaxunwind2/test.desc +++ b/regression/cbmc-incr/minmaxunwind2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-unwinding-assertions --unwind-min 5 --unwind-max 5 ^EXIT=10$ diff --git a/regression/cbmc-incr/minmaxunwind3/test.desc b/regression/cbmc-incr/minmaxunwind3/test.desc index 112bb920bdd..b9e907489b8 100644 --- a/regression/cbmc-incr/minmaxunwind3/test.desc +++ b/regression/cbmc-incr/minmaxunwind3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-unwinding-assertions --unwind-min 2 --unwind-max 4 ^EXIT=0$ diff --git a/regression/cbmc-incr/minmaxunwind4/test.desc b/regression/cbmc-incr/minmaxunwind4/test.desc index b1c035a6005..e3a5007d81d 100644 --- a/regression/cbmc-incr/minmaxunwind4/test.desc +++ b/regression/cbmc-incr/minmaxunwind4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-unwinding-assertions --unwind-min 6 --unwind-max 8 ^EXIT=10$ diff --git a/regression/cbmc-incr/minmaxunwind5/test.desc b/regression/cbmc-incr/minmaxunwind5/test.desc index 337f56ebade..4b81055826f 100644 --- a/regression/cbmc-incr/minmaxunwind5/test.desc +++ b/regression/cbmc-incr/minmaxunwind5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-unwinding-assertions --unwind-min 4 ^EXIT=10$ diff --git a/regression/cbmc-incr/moreasserts1/test.desc b/regression/cbmc-incr/moreasserts1/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-incr/moreasserts1/test.desc +++ b/regression/cbmc-incr/moreasserts1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-incr/moreloops1/test.desc b/regression/cbmc-incr/moreloops1/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-incr/moreloops1/test.desc +++ b/regression/cbmc-incr/moreloops1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-incr/nestedloop1/test.desc b/regression/cbmc-incr/nestedloop1/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-incr/nestedloop1/test.desc +++ b/regression/cbmc-incr/nestedloop1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-incr/no-unwinding-assertion1/test.desc b/regression/cbmc-incr/no-unwinding-assertion1/test.desc index 7a617d1973c..f17855ff1c8 100644 --- a/regression/cbmc-incr/no-unwinding-assertion1/test.desc +++ b/regression/cbmc-incr/no-unwinding-assertion1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-unwinding-assertions --unwind-max 10 ^EXIT=0$ diff --git a/regression/cbmc-incr/recursion1/test.desc b/regression/cbmc-incr/recursion1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-incr/recursion1/test.desc +++ b/regression/cbmc-incr/recursion1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-incr/recursion2/test.desc b/regression/cbmc-incr/recursion2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-incr/recursion2/test.desc +++ b/regression/cbmc-incr/recursion2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-incr/simpleloop1/test.desc b/regression/cbmc-incr/simpleloop1/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-incr/simpleloop1/test.desc +++ b/regression/cbmc-incr/simpleloop1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-incr/simpleloop2/test.desc b/regression/cbmc-incr/simpleloop2/test.desc index eb832bc4041..acae2360065 100644 --- a/regression/cbmc-incr/simpleloop2/test.desc +++ b/regression/cbmc-incr/simpleloop2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --unwind-max 6 --no-unwinding-assertions ^EXIT=10$ diff --git a/regression/cbmc-incr/simpleloop3/test.desc b/regression/cbmc-incr/simpleloop3/test.desc index 9b667e07606..1ad8506ebe7 100644 --- a/regression/cbmc-incr/simpleloop3/test.desc +++ b/regression/cbmc-incr/simpleloop3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-unwinding-assertions ^EXIT=10$ diff --git a/regression/cbmc-incr/simpleloopmax1/test.desc b/regression/cbmc-incr/simpleloopmax1/test.desc index 4b23aaa8a1e..dc32e82ea45 100644 --- a/regression/cbmc-incr/simpleloopmax1/test.desc +++ b/regression/cbmc-incr/simpleloopmax1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-unwinding-assertions --unwind-max 10 ^EXIT=10$ diff --git a/regression/cbmc-incr/simpleloopmax2/test.desc b/regression/cbmc-incr/simpleloopmax2/test.desc index 7a617d1973c..f17855ff1c8 100644 --- a/regression/cbmc-incr/simpleloopmax2/test.desc +++ b/regression/cbmc-incr/simpleloopmax2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-unwinding-assertions --unwind-max 10 ^EXIT=0$ diff --git a/regression/cbmc-incr/simplifier1/test.desc b/regression/cbmc-incr/simplifier1/test.desc index d4fd36300ef..e4ee9f7fc38 100644 --- a/regression/cbmc-incr/simplifier1/test.desc +++ b/regression/cbmc-incr/simplifier1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --unwind-max 5 --no-unwinding-assertions ^EXIT=0$ diff --git a/regression/cbmc-incr/simplifier2/test.desc b/regression/cbmc-incr/simplifier2/test.desc index bcf28728cec..41bba6f99c4 100644 --- a/regression/cbmc-incr/simplifier2/test.desc +++ b/regression/cbmc-incr/simplifier2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --unwind-max 3 --no-unwinding-assertions ^EXIT=0$ diff --git a/regression/cbmc-incr/simplifier3/test.desc b/regression/cbmc-incr/simplifier3/test.desc index d4fd36300ef..e4ee9f7fc38 100644 --- a/regression/cbmc-incr/simplifier3/test.desc +++ b/regression/cbmc-incr/simplifier3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --unwind-max 5 --no-unwinding-assertions ^EXIT=0$ diff --git a/regression/cbmc-incr/sum_array_true1/test.desc b/regression/cbmc-incr/sum_array_true1/test.desc index a907bb6415d..3e307e571fe 100644 --- a/regression/cbmc-incr/sum_array_true1/test.desc +++ b/regression/cbmc-incr/sum_array_true1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --error-label ERROR --unwind-max 6 --no-unwinding-assertions ^EXIT=0$ diff --git a/regression/cbmc-incr/unwind-not-forever1/test.desc b/regression/cbmc-incr/unwind-not-forever1/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-incr/unwind-not-forever1/test.desc +++ b/regression/cbmc-incr/unwind-not-forever1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-incr/unwind-not-forever2/test.desc b/regression/cbmc-incr/unwind-not-forever2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-incr/unwind-not-forever2/test.desc +++ b/regression/cbmc-incr/unwind-not-forever2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-incr/unwinding-assertion1/test.desc b/regression/cbmc-incr/unwinding-assertion1/test.desc index 3ede5ed0f72..efb176e1ccc 100644 --- a/regression/cbmc-incr/unwinding-assertion1/test.desc +++ b/regression/cbmc-incr/unwinding-assertion1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --unwind-max 10 ^EXIT=10$ diff --git a/regression/cbmc-incr/verisec_OpenSER__cases1_stripFullBoth_arr_false1/test.desc b/regression/cbmc-incr/verisec_OpenSER__cases1_stripFullBoth_arr_false1/test.desc index feb208278d1..fe5e0b6d27c 100644 --- a/regression/cbmc-incr/verisec_OpenSER__cases1_stripFullBoth_arr_false1/test.desc +++ b/regression/cbmc-incr/verisec_OpenSER__cases1_stripFullBoth_arr_false1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --error-label ERROR --unwind-max 6 ^EXIT=10$ diff --git a/regression/cbmc-with-incr/ASHR1/test.desc b/regression/cbmc-with-incr/ASHR1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/ASHR1/test.desc +++ b/regression/cbmc-with-incr/ASHR1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Address_of1/test.desc b/regression/cbmc-with-incr/Address_of1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Address_of1/test.desc +++ b/regression/cbmc-with-incr/Address_of1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Address_of2/test.desc b/regression/cbmc-with-incr/Address_of2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Address_of2/test.desc +++ b/regression/cbmc-with-incr/Address_of2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Anonymous_Struct1/test.desc b/regression/cbmc-with-incr/Anonymous_Struct1/test.desc index 39c491ba8bb..873bd8d918c 100644 --- a/regression/cbmc-with-incr/Anonymous_Struct1/test.desc +++ b/regression/cbmc-with-incr/Anonymous_Struct1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Anonymous_Struct2/test.desc b/regression/cbmc-with-incr/Anonymous_Struct2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Anonymous_Struct2/test.desc +++ b/regression/cbmc-with-incr/Anonymous_Struct2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Anonymous_Struct3/test.desc b/regression/cbmc-with-incr/Anonymous_Struct3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Anonymous_Struct3/test.desc +++ b/regression/cbmc-with-incr/Anonymous_Struct3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Array_Initialization1/test.desc b/regression/cbmc-with-incr/Array_Initialization1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Array_Initialization1/test.desc +++ b/regression/cbmc-with-incr/Array_Initialization1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Array_Initialization2/test.desc b/regression/cbmc-with-incr/Array_Initialization2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Array_Initialization2/test.desc +++ b/regression/cbmc-with-incr/Array_Initialization2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Array_Initialization3/test.desc b/regression/cbmc-with-incr/Array_Initialization3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Array_Initialization3/test.desc +++ b/regression/cbmc-with-incr/Array_Initialization3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Array_UF/test.desc b/regression/cbmc-with-incr/Array_UF/test.desc index 91cbd435ddd..d3d4443c8cb 100644 --- a/regression/cbmc-with-incr/Array_UF/test.desc +++ b/regression/cbmc-with-incr/Array_UF/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c --arrays-uf-always ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Assumption1/test.desc b/regression/cbmc-with-incr/Assumption1/test.desc index 33900ad2b78..4aa47233d39 100644 --- a/regression/cbmc-with-incr/Assumption1/test.desc +++ b/regression/cbmc-with-incr/Assumption1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/BV_Arithmetic1/test.desc b/regression/cbmc-with-incr/BV_Arithmetic1/test.desc index 33900ad2b78..4aa47233d39 100644 --- a/regression/cbmc-with-incr/BV_Arithmetic1/test.desc +++ b/regression/cbmc-with-incr/BV_Arithmetic1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/BV_Arithmetic2/test.desc b/regression/cbmc-with-incr/BV_Arithmetic2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/BV_Arithmetic2/test.desc +++ b/regression/cbmc-with-incr/BV_Arithmetic2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/BV_Arithmetic3/test.desc b/regression/cbmc-with-incr/BV_Arithmetic3/test.desc index d2a7e3e7574..e6ca0ec0299 100644 --- a/regression/cbmc-with-incr/BV_Arithmetic3/test.desc +++ b/regression/cbmc-with-incr/BV_Arithmetic3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/BV_Arithmetic4/test.desc b/regression/cbmc-with-incr/BV_Arithmetic4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/BV_Arithmetic4/test.desc +++ b/regression/cbmc-with-incr/BV_Arithmetic4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/BV_Arithmetic5/test.desc b/regression/cbmc-with-incr/BV_Arithmetic5/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/BV_Arithmetic5/test.desc +++ b/regression/cbmc-with-incr/BV_Arithmetic5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/BV_Arithmetic6/test.desc b/regression/cbmc-with-incr/BV_Arithmetic6/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/BV_Arithmetic6/test.desc +++ b/regression/cbmc-with-incr/BV_Arithmetic6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Bitfields1/test.desc b/regression/cbmc-with-incr/Bitfields1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Bitfields1/test.desc +++ b/regression/cbmc-with-incr/Bitfields1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Bitfields2/test.desc b/regression/cbmc-with-incr/Bitfields2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Bitfields2/test.desc +++ b/regression/cbmc-with-incr/Bitfields2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Bool1/test.desc b/regression/cbmc-with-incr/Bool1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Bool1/test.desc +++ b/regression/cbmc-with-incr/Bool1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Bool2/test.desc b/regression/cbmc-with-incr/Bool2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Bool2/test.desc +++ b/regression/cbmc-with-incr/Bool2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Bool3/test.desc b/regression/cbmc-with-incr/Bool3/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-with-incr/Bool3/test.desc +++ b/regression/cbmc-with-incr/Bool3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Bool4/test.desc b/regression/cbmc-with-incr/Bool4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Bool4/test.desc +++ b/regression/cbmc-with-incr/Bool4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Boolean_Guards1/test.desc b/regression/cbmc-with-incr/Boolean_Guards1/test.desc index da239c1965b..6550ede8bf0 100644 --- a/regression/cbmc-with-incr/Boolean_Guards1/test.desc +++ b/regression/cbmc-with-incr/Boolean_Guards1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --bounds-check --pointer-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/CMakeLists.txt b/regression/cbmc-with-incr/CMakeLists.txt new file mode 100644 index 00000000000..da7f7e70da7 --- /dev/null +++ b/regression/cbmc-with-incr/CMakeLists.txt @@ -0,0 +1,3 @@ +add_test_pl_tests( + "$ --incremental" +) diff --git a/regression/cbmc-with-incr/Computed-Goto1/test.desc b/regression/cbmc-with-incr/Computed-Goto1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Computed-Goto1/test.desc +++ b/regression/cbmc-with-incr/Computed-Goto1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Division1/test.desc b/regression/cbmc-with-incr/Division1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Division1/test.desc +++ b/regression/cbmc-with-incr/Division1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Division2/test.desc b/regression/cbmc-with-incr/Division2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Division2/test.desc +++ b/regression/cbmc-with-incr/Division2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Double-to-float-no-simp1-fix1/test.desc b/regression/cbmc-with-incr/Double-to-float-no-simp1-fix1/test.desc index 4d2a93e6e26..dc9e039b99a 100644 --- a/regression/cbmc-with-incr/Double-to-float-no-simp1-fix1/test.desc +++ b/regression/cbmc-with-incr/Double-to-float-no-simp1-fix1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Double-to-float-no-simp1-fix2/test.desc b/regression/cbmc-with-incr/Double-to-float-no-simp1-fix2/test.desc index 4d2a93e6e26..dc9e039b99a 100644 --- a/regression/cbmc-with-incr/Double-to-float-no-simp1-fix2/test.desc +++ b/regression/cbmc-with-incr/Double-to-float-no-simp1-fix2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Double-to-float-no-simp1/test.desc b/regression/cbmc-with-incr/Double-to-float-no-simp1/test.desc index 26cf28c608c..dc9e039b99a 100644 --- a/regression/cbmc-with-incr/Double-to-float-no-simp1/test.desc +++ b/regression/cbmc-with-incr/Double-to-float-no-simp1/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c --floatbv --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Double-to-float-with-simp1/test.desc b/regression/cbmc-with-incr/Double-to-float-with-simp1/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Double-to-float-with-simp1/test.desc +++ b/regression/cbmc-with-incr/Double-to-float-with-simp1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Ellipsis1/test.desc b/regression/cbmc-with-incr/Ellipsis1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Ellipsis1/test.desc +++ b/regression/cbmc-with-incr/Ellipsis1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Ellipsis2/test.desc b/regression/cbmc-with-incr/Ellipsis2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Ellipsis2/test.desc +++ b/regression/cbmc-with-incr/Ellipsis2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Endianness1/test.desc b/regression/cbmc-with-incr/Endianness1/test.desc index 217eac96e2f..ba4b3088aad 100644 --- a/regression/cbmc-with-incr/Endianness1/test.desc +++ b/regression/cbmc-with-incr/Endianness1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --little-endian ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Endianness2/test.desc b/regression/cbmc-with-incr/Endianness2/test.desc index 4f2eebc5e15..7a9dc127d75 100644 --- a/regression/cbmc-with-incr/Endianness2/test.desc +++ b/regression/cbmc-with-incr/Endianness2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --big-endian ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Endianness3/test.desc b/regression/cbmc-with-incr/Endianness3/test.desc index 217eac96e2f..ba4b3088aad 100644 --- a/regression/cbmc-with-incr/Endianness3/test.desc +++ b/regression/cbmc-with-incr/Endianness3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --little-endian ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Endianness4/test.desc b/regression/cbmc-with-incr/Endianness4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Endianness4/test.desc +++ b/regression/cbmc-with-incr/Endianness4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Endianness5/test.desc b/regression/cbmc-with-incr/Endianness5/test.desc index 4e90da351ba..78c5c527dda 100644 --- a/regression/cbmc-with-incr/Endianness5/test.desc +++ b/regression/cbmc-with-incr/Endianness5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --little-endian --pointer-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Endianness6/test.desc b/regression/cbmc-with-incr/Endianness6/test.desc index 81ceb4c6dc0..97280db41b7 100644 --- a/regression/cbmc-with-incr/Endianness6/test.desc +++ b/regression/cbmc-with-incr/Endianness6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --big-endian ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Endianness7/test.desc b/regression/cbmc-with-incr/Endianness7/test.desc index 54056d719c9..5c1f29271aa 100644 --- a/regression/cbmc-with-incr/Endianness7/test.desc +++ b/regression/cbmc-with-incr/Endianness7/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --big-endian --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Endianness8/test.desc b/regression/cbmc-with-incr/Endianness8/test.desc index 81ceb4c6dc0..97280db41b7 100644 --- a/regression/cbmc-with-incr/Endianness8/test.desc +++ b/regression/cbmc-with-incr/Endianness8/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --big-endian ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Endianness9/test.desc b/regression/cbmc-with-incr/Endianness9/test.desc index 76e90889ee9..97280db41b7 100644 --- a/regression/cbmc-with-incr/Endianness9/test.desc +++ b/regression/cbmc-with-incr/Endianness9/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c --big-endian ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Error_Label1/test.desc b/regression/cbmc-with-incr/Error_Label1/test.desc index e14ade773e5..954d11d1147 100644 --- a/regression/cbmc-with-incr/Error_Label1/test.desc +++ b/regression/cbmc-with-incr/Error_Label1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --error-label ERROR ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Error_Label2/test.desc b/regression/cbmc-with-incr/Error_Label2/test.desc index 3631d5c8930..9392434c203 100644 --- a/regression/cbmc-with-incr/Error_Label2/test.desc +++ b/regression/cbmc-with-incr/Error_Label2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --error-label ERROR --no-assertions ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Error_Label3/test.desc b/regression/cbmc-with-incr/Error_Label3/test.desc index 450e47883c7..f8278beb10b 100644 --- a/regression/cbmc-with-incr/Error_Label3/test.desc +++ b/regression/cbmc-with-incr/Error_Label3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --error-label ERROR1 --error-label ERROR2 ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Eval_Order1/test.desc b/regression/cbmc-with-incr/Eval_Order1/test.desc index 33900ad2b78..4aa47233d39 100644 --- a/regression/cbmc-with-incr/Eval_Order1/test.desc +++ b/regression/cbmc-with-incr/Eval_Order1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Exceptions1/test.desc b/regression/cbmc-with-incr/Exceptions1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Exceptions1/test.desc +++ b/regression/cbmc-with-incr/Exceptions1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Failing_Assert1/test.desc b/regression/cbmc-with-incr/Failing_Assert1/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-with-incr/Failing_Assert1/test.desc +++ b/regression/cbmc-with-incr/Failing_Assert1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Fixedbv1/test.desc b/regression/cbmc-with-incr/Fixedbv1/test.desc index 991a8916c67..53abd750f68 100644 --- a/regression/cbmc-with-incr/Fixedbv1/test.desc +++ b/regression/cbmc-with-incr/Fixedbv1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --fixedbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Fixedbv2/test.desc b/regression/cbmc-with-incr/Fixedbv2/test.desc index 991a8916c67..53abd750f68 100644 --- a/regression/cbmc-with-incr/Fixedbv2/test.desc +++ b/regression/cbmc-with-incr/Fixedbv2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --fixedbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Fixedbv3/test.desc b/regression/cbmc-with-incr/Fixedbv3/test.desc index 991a8916c67..53abd750f68 100644 --- a/regression/cbmc-with-incr/Fixedbv3/test.desc +++ b/regression/cbmc-with-incr/Fixedbv3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --fixedbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Fixedbv4/test.desc b/regression/cbmc-with-incr/Fixedbv4/test.desc index a43bbd7df65..dcd58b05b14 100644 --- a/regression/cbmc-with-incr/Fixedbv4/test.desc +++ b/regression/cbmc-with-incr/Fixedbv4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --fixedbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Fixedbv5/test.desc b/regression/cbmc-with-incr/Fixedbv5/test.desc index 991a8916c67..53abd750f68 100644 --- a/regression/cbmc-with-incr/Fixedbv5/test.desc +++ b/regression/cbmc-with-incr/Fixedbv5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --fixedbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Fixedbv6/test.desc b/regression/cbmc-with-incr/Fixedbv6/test.desc index 991a8916c67..53abd750f68 100644 --- a/regression/cbmc-with-incr/Fixedbv6/test.desc +++ b/regression/cbmc-with-incr/Fixedbv6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --fixedbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Fixedbv7/test.desc b/regression/cbmc-with-incr/Fixedbv7/test.desc index 5b018497756..660c72500af 100644 --- a/regression/cbmc-with-incr/Fixedbv7/test.desc +++ b/regression/cbmc-with-incr/Fixedbv7/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --fixedbv --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-Rounding1/test.desc b/regression/cbmc-with-incr/Float-Rounding1/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float-Rounding1/test.desc +++ b/regression/cbmc-with-incr/Float-Rounding1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-Rounding2/test.desc b/regression/cbmc-with-incr/Float-Rounding2/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float-Rounding2/test.desc +++ b/regression/cbmc-with-incr/Float-Rounding2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-data-dependent-rounding/test.desc b/regression/cbmc-with-incr/Float-data-dependent-rounding/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Float-data-dependent-rounding/test.desc +++ b/regression/cbmc-with-incr/Float-data-dependent-rounding/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-div1/test.desc b/regression/cbmc-with-incr/Float-div1/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float-div1/test.desc +++ b/regression/cbmc-with-incr/Float-div1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-flags-no-simp1/test.desc b/regression/cbmc-with-incr/Float-flags-no-simp1/test.desc index 4d2a93e6e26..dc9e039b99a 100644 --- a/regression/cbmc-with-incr/Float-flags-no-simp1/test.desc +++ b/regression/cbmc-with-incr/Float-flags-no-simp1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-flags-simp1/test.desc b/regression/cbmc-with-incr/Float-flags-simp1/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float-flags-simp1/test.desc +++ b/regression/cbmc-with-incr/Float-flags-simp1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-no-simp1/test.desc b/regression/cbmc-with-incr/Float-no-simp1/test.desc index 376d43d5dfa..b7c95d95569 100644 --- a/regression/cbmc-with-incr/Float-no-simp1/test.desc +++ b/regression/cbmc-with-incr/Float-no-simp1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-no-simp2/test.desc b/regression/cbmc-with-incr/Float-no-simp2/test.desc index 4d2a93e6e26..dc9e039b99a 100644 --- a/regression/cbmc-with-incr/Float-no-simp2/test.desc +++ b/regression/cbmc-with-incr/Float-no-simp2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-no-simp3/test.desc b/regression/cbmc-with-incr/Float-no-simp3/test.desc index 4d2a93e6e26..dc9e039b99a 100644 --- a/regression/cbmc-with-incr/Float-no-simp3/test.desc +++ b/regression/cbmc-with-incr/Float-no-simp3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-no-simp4/test.desc b/regression/cbmc-with-incr/Float-no-simp4/test.desc index 4d2a93e6e26..dc9e039b99a 100644 --- a/regression/cbmc-with-incr/Float-no-simp4/test.desc +++ b/regression/cbmc-with-incr/Float-no-simp4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-no-simp5/test.desc b/regression/cbmc-with-incr/Float-no-simp5/test.desc index 4d2a93e6e26..dc9e039b99a 100644 --- a/regression/cbmc-with-incr/Float-no-simp5/test.desc +++ b/regression/cbmc-with-incr/Float-no-simp5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-no-simp6/test.desc b/regression/cbmc-with-incr/Float-no-simp6/test.desc index 4d2a93e6e26..dc9e039b99a 100644 --- a/regression/cbmc-with-incr/Float-no-simp6/test.desc +++ b/regression/cbmc-with-incr/Float-no-simp6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-no-simp7/test.desc b/regression/cbmc-with-incr/Float-no-simp7/test.desc index 4d2a93e6e26..dc9e039b99a 100644 --- a/regression/cbmc-with-incr/Float-no-simp7/test.desc +++ b/regression/cbmc-with-incr/Float-no-simp7/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-no-simp8/test.desc b/regression/cbmc-with-incr/Float-no-simp8/test.desc index 4d2a93e6e26..dc9e039b99a 100644 --- a/regression/cbmc-with-incr/Float-no-simp8/test.desc +++ b/regression/cbmc-with-incr/Float-no-simp8/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-no-simp9/test.desc b/regression/cbmc-with-incr/Float-no-simp9/test.desc index 4d2a93e6e26..dc9e039b99a 100644 --- a/regression/cbmc-with-incr/Float-no-simp9/test.desc +++ b/regression/cbmc-with-incr/Float-no-simp9/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-overflow1/test.desc b/regression/cbmc-with-incr/Float-overflow1/test.desc index a1de3d41cf0..34ceb2ef1d1 100644 --- a/regression/cbmc-with-incr/Float-overflow1/test.desc +++ b/regression/cbmc-with-incr/Float-overflow1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv --float-overflow-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-overflow2/test.desc b/regression/cbmc-with-incr/Float-overflow2/test.desc index f7cd5fc8bf3..fe62098e887 100644 --- a/regression/cbmc-with-incr/Float-overflow2/test.desc +++ b/regression/cbmc-with-incr/Float-overflow2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv --float-overflow-check ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Float-to-double1/test.desc b/regression/cbmc-with-incr/Float-to-double1/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float-to-double1/test.desc +++ b/regression/cbmc-with-incr/Float-to-double1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-to-double2/test.desc b/regression/cbmc-with-incr/Float-to-double2/test.desc index 4d2a93e6e26..dc9e039b99a 100644 --- a/regression/cbmc-with-incr/Float-to-double2/test.desc +++ b/regression/cbmc-with-incr/Float-to-double2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float-zero-sum1/test.desc b/regression/cbmc-with-incr/Float-zero-sum1/test.desc index 26cf28c608c..dc9e039b99a 100644 --- a/regression/cbmc-with-incr/Float-zero-sum1/test.desc +++ b/regression/cbmc-with-incr/Float-zero-sum1/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c --floatbv --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float1/test.desc b/regression/cbmc-with-incr/Float1/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float1/test.desc +++ b/regression/cbmc-with-incr/Float1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float11/test.desc b/regression/cbmc-with-incr/Float11/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float11/test.desc +++ b/regression/cbmc-with-incr/Float11/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float12/test.desc b/regression/cbmc-with-incr/Float12/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Float12/test.desc +++ b/regression/cbmc-with-incr/Float12/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float13/test.desc b/regression/cbmc-with-incr/Float13/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Float13/test.desc +++ b/regression/cbmc-with-incr/Float13/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float14/test.desc b/regression/cbmc-with-incr/Float14/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Float14/test.desc +++ b/regression/cbmc-with-incr/Float14/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float18/test.desc b/regression/cbmc-with-incr/Float18/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float18/test.desc +++ b/regression/cbmc-with-incr/Float18/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float19/test.desc b/regression/cbmc-with-incr/Float19/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float19/test.desc +++ b/regression/cbmc-with-incr/Float19/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float2/test.desc b/regression/cbmc-with-incr/Float2/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float2/test.desc +++ b/regression/cbmc-with-incr/Float2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float20/test.desc b/regression/cbmc-with-incr/Float20/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float20/test.desc +++ b/regression/cbmc-with-incr/Float20/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float21/test.desc b/regression/cbmc-with-incr/Float21/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float21/test.desc +++ b/regression/cbmc-with-incr/Float21/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float22/test.desc b/regression/cbmc-with-incr/Float22/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float22/test.desc +++ b/regression/cbmc-with-incr/Float22/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float3/test.desc b/regression/cbmc-with-incr/Float3/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float3/test.desc +++ b/regression/cbmc-with-incr/Float3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float4/test.desc b/regression/cbmc-with-incr/Float4/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float4/test.desc +++ b/regression/cbmc-with-incr/Float4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float5/test.desc b/regression/cbmc-with-incr/Float5/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float5/test.desc +++ b/regression/cbmc-with-incr/Float5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float6/test.desc b/regression/cbmc-with-incr/Float6/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float6/test.desc +++ b/regression/cbmc-with-incr/Float6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float7/test.desc b/regression/cbmc-with-incr/Float7/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Float7/test.desc +++ b/regression/cbmc-with-incr/Float7/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float8/test.desc b/regression/cbmc-with-incr/Float8/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Float8/test.desc +++ b/regression/cbmc-with-incr/Float8/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float_lib1/test.desc b/regression/cbmc-with-incr/Float_lib1/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float_lib1/test.desc +++ b/regression/cbmc-with-incr/Float_lib1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Float_lib2/test.desc b/regression/cbmc-with-incr/Float_lib2/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/Float_lib2/test.desc +++ b/regression/cbmc-with-incr/Float_lib2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Free1/test.desc b/regression/cbmc-with-incr/Free1/test.desc index 02f1049518a..90d1fb1d263 100644 --- a/regression/cbmc-with-incr/Free1/test.desc +++ b/regression/cbmc-with-incr/Free1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Free2/test.desc b/regression/cbmc-with-incr/Free2/test.desc index 02f1049518a..90d1fb1d263 100644 --- a/regression/cbmc-with-incr/Free2/test.desc +++ b/regression/cbmc-with-incr/Free2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Free3/test.desc b/regression/cbmc-with-incr/Free3/test.desc index fd1b888b81d..7cb31bd31f9 100644 --- a/regression/cbmc-with-incr/Free3/test.desc +++ b/regression/cbmc-with-incr/Free3/test.desc @@ -1,8 +1,8 @@ -CORE +FUTURE main.c --pointer-check +^EXIT=10$ ^SIGNAL=0$ -^Counterexample:$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/cbmc-with-incr/Free4/test.desc b/regression/cbmc-with-incr/Free4/test.desc index fd1b888b81d..7cb31bd31f9 100644 --- a/regression/cbmc-with-incr/Free4/test.desc +++ b/regression/cbmc-with-incr/Free4/test.desc @@ -1,8 +1,8 @@ -CORE +FUTURE main.c --pointer-check +^EXIT=10$ ^SIGNAL=0$ -^Counterexample:$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/cbmc-with-incr/Function-KnR1/test.desc b/regression/cbmc-with-incr/Function-KnR1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function-KnR1/test.desc +++ b/regression/cbmc-with-incr/Function-KnR1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function1/test.desc b/regression/cbmc-with-incr/Function1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function1/test.desc +++ b/regression/cbmc-with-incr/Function1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function10/test.desc b/regression/cbmc-with-incr/Function10/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function10/test.desc +++ b/regression/cbmc-with-incr/Function10/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function11/test.desc b/regression/cbmc-with-incr/Function11/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function11/test.desc +++ b/regression/cbmc-with-incr/Function11/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function12/test.desc b/regression/cbmc-with-incr/Function12/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function12/test.desc +++ b/regression/cbmc-with-incr/Function12/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function13/test.desc b/regression/cbmc-with-incr/Function13/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function13/test.desc +++ b/regression/cbmc-with-incr/Function13/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function2/test.desc b/regression/cbmc-with-incr/Function2/test.desc index 33900ad2b78..4aa47233d39 100644 --- a/regression/cbmc-with-incr/Function2/test.desc +++ b/regression/cbmc-with-incr/Function2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Function3/test.desc b/regression/cbmc-with-incr/Function3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function3/test.desc +++ b/regression/cbmc-with-incr/Function3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function4/test.desc b/regression/cbmc-with-incr/Function4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function4/test.desc +++ b/regression/cbmc-with-incr/Function4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function5/test.desc b/regression/cbmc-with-incr/Function5/test.desc index 50371f73fff..9a3c0c12d69 100644 --- a/regression/cbmc-with-incr/Function5/test.desc +++ b/regression/cbmc-with-incr/Function5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check --bounds-check ^SIGNAL=0$ diff --git a/regression/cbmc-with-incr/Function6/test.desc b/regression/cbmc-with-incr/Function6/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function6/test.desc +++ b/regression/cbmc-with-incr/Function6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function7/test.desc b/regression/cbmc-with-incr/Function7/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function7/test.desc +++ b/regression/cbmc-with-incr/Function7/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function8/test.desc b/regression/cbmc-with-incr/Function8/test.desc index 33900ad2b78..4aa47233d39 100644 --- a/regression/cbmc-with-incr/Function8/test.desc +++ b/regression/cbmc-with-incr/Function8/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Function9/test.desc b/regression/cbmc-with-incr/Function9/test.desc index 33900ad2b78..4aa47233d39 100644 --- a/regression/cbmc-with-incr/Function9/test.desc +++ b/regression/cbmc-with-incr/Function9/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Function_Eval_Order2/test.desc b/regression/cbmc-with-incr/Function_Eval_Order2/test.desc index 33900ad2b78..4aa47233d39 100644 --- a/regression/cbmc-with-incr/Function_Eval_Order2/test.desc +++ b/regression/cbmc-with-incr/Function_Eval_Order2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Function_Parameters1/test.desc b/regression/cbmc-with-incr/Function_Parameters1/test.desc index fc2b1874059..f98f52c58e3 100644 --- a/regression/cbmc-with-incr/Function_Parameters1/test.desc +++ b/regression/cbmc-with-incr/Function_Parameters1/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function_Pointer1/test.desc b/regression/cbmc-with-incr/Function_Pointer1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function_Pointer1/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function_Pointer10/test.desc b/regression/cbmc-with-incr/Function_Pointer10/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function_Pointer10/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer10/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function_Pointer11/test.desc b/regression/cbmc-with-incr/Function_Pointer11/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function_Pointer11/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer11/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function_Pointer12/test.desc b/regression/cbmc-with-incr/Function_Pointer12/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function_Pointer12/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer12/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function_Pointer13/test.desc b/regression/cbmc-with-incr/Function_Pointer13/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function_Pointer13/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer13/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function_Pointer14/test.desc b/regression/cbmc-with-incr/Function_Pointer14/test.desc index 39c491ba8bb..873bd8d918c 100644 --- a/regression/cbmc-with-incr/Function_Pointer14/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer14/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function_Pointer15/test.desc b/regression/cbmc-with-incr/Function_Pointer15/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-with-incr/Function_Pointer15/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer15/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Function_Pointer16/test.desc b/regression/cbmc-with-incr/Function_Pointer16/test.desc index 39c491ba8bb..873bd8d918c 100644 --- a/regression/cbmc-with-incr/Function_Pointer16/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer16/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function_Pointer17/test.desc b/regression/cbmc-with-incr/Function_Pointer17/test.desc index b5f3e5b3c93..58806af6ac6 100644 --- a/regression/cbmc-with-incr/Function_Pointer17/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer17/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --unwind-max 1 ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function_Pointer2/test.desc b/regression/cbmc-with-incr/Function_Pointer2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function_Pointer2/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function_Pointer3/test.desc b/regression/cbmc-with-incr/Function_Pointer3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function_Pointer3/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function_Pointer4/test.desc b/regression/cbmc-with-incr/Function_Pointer4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function_Pointer4/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function_Pointer5/test.desc b/regression/cbmc-with-incr/Function_Pointer5/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function_Pointer5/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function_Pointer6/test.desc b/regression/cbmc-with-incr/Function_Pointer6/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function_Pointer6/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function_Pointer7/test.desc b/regression/cbmc-with-incr/Function_Pointer7/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Function_Pointer7/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer7/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Function_Pointer8/test.desc b/regression/cbmc-with-incr/Function_Pointer8/test.desc index 33900ad2b78..4aa47233d39 100644 --- a/regression/cbmc-with-incr/Function_Pointer8/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer8/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Function_Pointer9/test.desc b/regression/cbmc-with-incr/Function_Pointer9/test.desc index 33900ad2b78..4aa47233d39 100644 --- a/regression/cbmc-with-incr/Function_Pointer9/test.desc +++ b/regression/cbmc-with-incr/Function_Pointer9/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Global_Initialization1/test.desc b/regression/cbmc-with-incr/Global_Initialization1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Global_Initialization1/test.desc +++ b/regression/cbmc-with-incr/Global_Initialization1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Global_Initialization2/test.desc b/regression/cbmc-with-incr/Global_Initialization2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Global_Initialization2/test.desc +++ b/regression/cbmc-with-incr/Global_Initialization2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Initialization1/test.desc b/regression/cbmc-with-incr/Initialization1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Initialization1/test.desc +++ b/regression/cbmc-with-incr/Initialization1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Initialization2/test.desc b/regression/cbmc-with-incr/Initialization2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Initialization2/test.desc +++ b/regression/cbmc-with-incr/Initialization2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Initialization3/test.desc b/regression/cbmc-with-incr/Initialization3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Initialization3/test.desc +++ b/regression/cbmc-with-incr/Initialization3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Initialization5/test.desc b/regression/cbmc-with-incr/Initialization5/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-with-incr/Initialization5/test.desc +++ b/regression/cbmc-with-incr/Initialization5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Initialization6/test.desc b/regression/cbmc-with-incr/Initialization6/test.desc index fb5fd7bb84f..4aa47233d39 100644 --- a/regression/cbmc-with-incr/Initialization6/test.desc +++ b/regression/cbmc-with-incr/Initialization6/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Initialization7/test.desc b/regression/cbmc-with-incr/Initialization7/test.desc index fb5fd7bb84f..4aa47233d39 100644 --- a/regression/cbmc-with-incr/Initialization7/test.desc +++ b/regression/cbmc-with-incr/Initialization7/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Linking1/test.desc b/regression/cbmc-with-incr/Linking1/test.desc index af20f90c655..b302e1734c3 100644 --- a/regression/cbmc-with-incr/Linking1/test.desc +++ b/regression/cbmc-with-incr/Linking1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c module.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Linking2/test.desc b/regression/cbmc-with-incr/Linking2/test.desc index af20f90c655..b302e1734c3 100644 --- a/regression/cbmc-with-incr/Linking2/test.desc +++ b/regression/cbmc-with-incr/Linking2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c module.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Linking3/test.desc b/regression/cbmc-with-incr/Linking3/test.desc index bb271770fef..eac92128f48 100644 --- a/regression/cbmc-with-incr/Linking3/test.desc +++ b/regression/cbmc-with-incr/Linking3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main1.c main2.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Linking4/test.desc b/regression/cbmc-with-incr/Linking4/test.desc index d88e6744dbd..e55c8af1212 100644 --- a/regression/cbmc-with-incr/Linking4/test.desc +++ b/regression/cbmc-with-incr/Linking4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE link1.c link2.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Local_out_of_scope1/test.desc b/regression/cbmc-with-incr/Local_out_of_scope1/test.desc index 950f6791fef..7cb31bd31f9 100644 --- a/regression/cbmc-with-incr/Local_out_of_scope1/test.desc +++ b/regression/cbmc-with-incr/Local_out_of_scope1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Malloc13/test.desc b/regression/cbmc-with-incr/Malloc13/test.desc index f3145b289ad..24c71045fd8 100644 --- a/regression/cbmc-with-incr/Malloc13/test.desc +++ b/regression/cbmc-with-incr/Malloc13/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --string-abstraction ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Malloc14/test.desc b/regression/cbmc-with-incr/Malloc14/test.desc index 9c96469df12..fb6666914d4 100644 --- a/regression/cbmc-with-incr/Malloc14/test.desc +++ b/regression/cbmc-with-incr/Malloc14/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Malloc15/test.desc b/regression/cbmc-with-incr/Malloc15/test.desc index f046159d042..b2b85f25827 100644 --- a/regression/cbmc-with-incr/Malloc15/test.desc +++ b/regression/cbmc-with-incr/Malloc15/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --32 ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Malloc16/test.desc b/regression/cbmc-with-incr/Malloc16/test.desc index f046159d042..b2b85f25827 100644 --- a/regression/cbmc-with-incr/Malloc16/test.desc +++ b/regression/cbmc-with-incr/Malloc16/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --32 ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Malloc17/test.desc b/regression/cbmc-with-incr/Malloc17/test.desc index 9c96469df12..fb6666914d4 100644 --- a/regression/cbmc-with-incr/Malloc17/test.desc +++ b/regression/cbmc-with-incr/Malloc17/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Malloc18/test.desc b/regression/cbmc-with-incr/Malloc18/test.desc index a27d6e3414c..fb6666914d4 100644 --- a/regression/cbmc-with-incr/Malloc18/test.desc +++ b/regression/cbmc-with-incr/Malloc18/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Malloc19/test.desc b/regression/cbmc-with-incr/Malloc19/test.desc index a27d6e3414c..fb6666914d4 100644 --- a/regression/cbmc-with-incr/Malloc19/test.desc +++ b/regression/cbmc-with-incr/Malloc19/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Malloc20/test.desc b/regression/cbmc-with-incr/Malloc20/test.desc index a27d6e3414c..fb6666914d4 100644 --- a/regression/cbmc-with-incr/Malloc20/test.desc +++ b/regression/cbmc-with-incr/Malloc20/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Memmove1/test.desc b/regression/cbmc-with-incr/Memmove1/test.desc index c0092d0ee56..76e601983c1 100644 --- a/regression/cbmc-with-incr/Memmove1/test.desc +++ b/regression/cbmc-with-incr/Memmove1/test.desc @@ -1,4 +1,4 @@ -THOROUGH +FUTURE main.c --unwind 17 ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Memory_leak1/test.desc b/regression/cbmc-with-incr/Memory_leak1/test.desc index 91591a9814c..4a3deeb99a4 100644 --- a/regression/cbmc-with-incr/Memory_leak1/test.desc +++ b/regression/cbmc-with-incr/Memory_leak1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --memory-leak-check ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Memory_leak2/test.desc b/regression/cbmc-with-incr/Memory_leak2/test.desc index f90f7c4f8f1..9d475e80a99 100644 --- a/regression/cbmc-with-incr/Memory_leak2/test.desc +++ b/regression/cbmc-with-incr/Memory_leak2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --memory-leak-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Mod1/test.desc b/regression/cbmc-with-incr/Mod1/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-with-incr/Mod1/test.desc +++ b/regression/cbmc-with-incr/Mod1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Mod2/test.desc b/regression/cbmc-with-incr/Mod2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Mod2/test.desc +++ b/regression/cbmc-with-incr/Mod2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Multi_Dimensional_Array1/test.desc b/regression/cbmc-with-incr/Multi_Dimensional_Array1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Multi_Dimensional_Array1/test.desc +++ b/regression/cbmc-with-incr/Multi_Dimensional_Array1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Multi_Dimensional_Array2/test.desc b/regression/cbmc-with-incr/Multi_Dimensional_Array2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Multi_Dimensional_Array2/test.desc +++ b/regression/cbmc-with-incr/Multi_Dimensional_Array2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Multi_Dimensional_Array3/test.desc b/regression/cbmc-with-incr/Multi_Dimensional_Array3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Multi_Dimensional_Array3/test.desc +++ b/regression/cbmc-with-incr/Multi_Dimensional_Array3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Multi_Dimensional_Array4/test.desc b/regression/cbmc-with-incr/Multi_Dimensional_Array4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Multi_Dimensional_Array4/test.desc +++ b/regression/cbmc-with-incr/Multi_Dimensional_Array4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Multi_Dimensional_Array5/test.desc b/regression/cbmc-with-incr/Multi_Dimensional_Array5/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Multi_Dimensional_Array5/test.desc +++ b/regression/cbmc-with-incr/Multi_Dimensional_Array5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Multi_Dimensional_Array6/test.desc b/regression/cbmc-with-incr/Multi_Dimensional_Array6/test.desc index c171dd49a18..083aef95321 100644 --- a/regression/cbmc-with-incr/Multi_Dimensional_Array6/test.desc +++ b/regression/cbmc-with-incr/Multi_Dimensional_Array6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --unwind-max 3 --no-unwinding-assertions --all-properties ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Negation1/test.desc b/regression/cbmc-with-incr/Negation1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Negation1/test.desc +++ b/regression/cbmc-with-incr/Negation1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Negation2/test.desc b/regression/cbmc-with-incr/Negation2/test.desc index cbd90510599..415020cf03f 100644 --- a/regression/cbmc-with-incr/Negation2/test.desc +++ b/regression/cbmc-with-incr/Negation2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-propagation ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Overflow_Addition1/test.desc b/regression/cbmc-with-incr/Overflow_Addition1/test.desc index 5dbaca0c795..846e5400516 100644 --- a/regression/cbmc-with-incr/Overflow_Addition1/test.desc +++ b/regression/cbmc-with-incr/Overflow_Addition1/test.desc @@ -1,8 +1,8 @@ -CORE +FUTURE main.c --signed-overflow-check +^EXIT=10$ ^SIGNAL=0$ -^Counterexample:$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/cbmc-with-incr/Overflow_Multiplication1/test.desc b/regression/cbmc-with-incr/Overflow_Multiplication1/test.desc index a83213498f1..161b62e81d1 100644 --- a/regression/cbmc-with-incr/Overflow_Multiplication1/test.desc +++ b/regression/cbmc-with-incr/Overflow_Multiplication1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE falsealarm.c --signed-overflow-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_Arithmetic1/test.desc b/regression/cbmc-with-incr/Pointer_Arithmetic1/test.desc index 39c491ba8bb..873bd8d918c 100644 --- a/regression/cbmc-with-incr/Pointer_Arithmetic1/test.desc +++ b/regression/cbmc-with-incr/Pointer_Arithmetic1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_Arithmetic10/test.desc b/regression/cbmc-with-incr/Pointer_Arithmetic10/test.desc index 39c491ba8bb..873bd8d918c 100644 --- a/regression/cbmc-with-incr/Pointer_Arithmetic10/test.desc +++ b/regression/cbmc-with-incr/Pointer_Arithmetic10/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_Arithmetic11/test.desc b/regression/cbmc-with-incr/Pointer_Arithmetic11/test.desc index f5e039ba3ed..d6d68d98e98 100644 --- a/regression/cbmc-with-incr/Pointer_Arithmetic11/test.desc +++ b/regression/cbmc-with-incr/Pointer_Arithmetic11/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check --little-endian ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_Arithmetic12/test.desc b/regression/cbmc-with-incr/Pointer_Arithmetic12/test.desc index 3de54602985..38d939ef120 100644 --- a/regression/cbmc-with-incr/Pointer_Arithmetic12/test.desc +++ b/regression/cbmc-with-incr/Pointer_Arithmetic12/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --32 --little-endian ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_Arithmetic13/test.desc b/regression/cbmc-with-incr/Pointer_Arithmetic13/test.desc index 52168c7eba4..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Pointer_Arithmetic13/test.desc +++ b/regression/cbmc-with-incr/Pointer_Arithmetic13/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_Arithmetic2/test.desc b/regression/cbmc-with-incr/Pointer_Arithmetic2/test.desc index 39c491ba8bb..873bd8d918c 100644 --- a/regression/cbmc-with-incr/Pointer_Arithmetic2/test.desc +++ b/regression/cbmc-with-incr/Pointer_Arithmetic2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_Arithmetic3/test.desc b/regression/cbmc-with-incr/Pointer_Arithmetic3/test.desc index 39c491ba8bb..873bd8d918c 100644 --- a/regression/cbmc-with-incr/Pointer_Arithmetic3/test.desc +++ b/regression/cbmc-with-incr/Pointer_Arithmetic3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_Arithmetic4/test.desc b/regression/cbmc-with-incr/Pointer_Arithmetic4/test.desc index 39c491ba8bb..873bd8d918c 100644 --- a/regression/cbmc-with-incr/Pointer_Arithmetic4/test.desc +++ b/regression/cbmc-with-incr/Pointer_Arithmetic4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_Arithmetic5/test.desc b/regression/cbmc-with-incr/Pointer_Arithmetic5/test.desc index 73810cf4375..d1dc65c4c82 100644 --- a/regression/cbmc-with-incr/Pointer_Arithmetic5/test.desc +++ b/regression/cbmc-with-incr/Pointer_Arithmetic5/test.desc @@ -1,8 +1,8 @@ -CORE +FUTURE main.c --pointer-check --bounds-check --function f +^EXIT=10$ ^SIGNAL=0$ -^Counterexample:$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/cbmc-with-incr/Pointer_Arithmetic6/test.desc b/regression/cbmc-with-incr/Pointer_Arithmetic6/test.desc index 39c491ba8bb..873bd8d918c 100644 --- a/regression/cbmc-with-incr/Pointer_Arithmetic6/test.desc +++ b/regression/cbmc-with-incr/Pointer_Arithmetic6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_Arithmetic7/test.desc b/regression/cbmc-with-incr/Pointer_Arithmetic7/test.desc index 39c491ba8bb..873bd8d918c 100644 --- a/regression/cbmc-with-incr/Pointer_Arithmetic7/test.desc +++ b/regression/cbmc-with-incr/Pointer_Arithmetic7/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_Arithmetic8/test.desc b/regression/cbmc-with-incr/Pointer_Arithmetic8/test.desc index 0f0f5660f42..d3f7d2d7cdd 100644 --- a/regression/cbmc-with-incr/Pointer_Arithmetic8/test.desc +++ b/regression/cbmc-with-incr/Pointer_Arithmetic8/test.desc @@ -1,8 +1,8 @@ -CORE +FUTURE main.c --pointer-check --bounds-check +^EXIT=10$ ^SIGNAL=0$ -^Counterexample:$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/cbmc-with-incr/Pointer_Arithmetic9/test.desc b/regression/cbmc-with-incr/Pointer_Arithmetic9/test.desc index 39c491ba8bb..873bd8d918c 100644 --- a/regression/cbmc-with-incr/Pointer_Arithmetic9/test.desc +++ b/regression/cbmc-with-incr/Pointer_Arithmetic9/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_Assume1/test.desc b/regression/cbmc-with-incr/Pointer_Assume1/test.desc index a27d6e3414c..fb6666914d4 100644 --- a/regression/cbmc-with-incr/Pointer_Assume1/test.desc +++ b/regression/cbmc-with-incr/Pointer_Assume1/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_array1/test.desc b/regression/cbmc-with-incr/Pointer_array1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Pointer_array1/test.desc +++ b/regression/cbmc-with-incr/Pointer_array1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_array2/test.desc b/regression/cbmc-with-incr/Pointer_array2/test.desc index 52168c7eba4..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Pointer_array2/test.desc +++ b/regression/cbmc-with-incr/Pointer_array2/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_byte_extract1/test.desc b/regression/cbmc-with-incr/Pointer_byte_extract1/test.desc index 12fc8ce06e1..8681f1ad0e1 100644 --- a/regression/cbmc-with-incr/Pointer_byte_extract1/test.desc +++ b/regression/cbmc-with-incr/Pointer_byte_extract1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_byte_extract2/test.desc b/regression/cbmc-with-incr/Pointer_byte_extract2/test.desc index ad9c2b40bd5..2b370199c4c 100644 --- a/regression/cbmc-with-incr/Pointer_byte_extract2/test.desc +++ b/regression/cbmc-with-incr/Pointer_byte_extract2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --all-properties --little-endian ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Pointer_byte_extract3/test.desc b/regression/cbmc-with-incr/Pointer_byte_extract3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Pointer_byte_extract3/test.desc +++ b/regression/cbmc-with-incr/Pointer_byte_extract3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_byte_extract4/test.desc b/regression/cbmc-with-incr/Pointer_byte_extract4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Pointer_byte_extract4/test.desc +++ b/regression/cbmc-with-incr/Pointer_byte_extract4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_byte_extract5/test.desc b/regression/cbmc-with-incr/Pointer_byte_extract5/test.desc index 47c1a75edbe..a3e0bed53f3 100644 --- a/regression/cbmc-with-incr/Pointer_byte_extract5/test.desc +++ b/regression/cbmc-with-incr/Pointer_byte_extract5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --all-properties --bounds-check --32 ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Pointer_byte_extract6/test.desc b/regression/cbmc-with-incr/Pointer_byte_extract6/test.desc index 466da18b2b5..f98f52c58e3 100644 --- a/regression/cbmc-with-incr/Pointer_byte_extract6/test.desc +++ b/regression/cbmc-with-incr/Pointer_byte_extract6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_byte_extract7/test.desc b/regression/cbmc-with-incr/Pointer_byte_extract7/test.desc index 81ceb4c6dc0..97280db41b7 100644 --- a/regression/cbmc-with-incr/Pointer_byte_extract7/test.desc +++ b/regression/cbmc-with-incr/Pointer_byte_extract7/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --big-endian ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_byte_extract8/test.desc b/regression/cbmc-with-incr/Pointer_byte_extract8/test.desc index a8688dd7116..58fb9a48fbe 100644 --- a/regression/cbmc-with-incr/Pointer_byte_extract8/test.desc +++ b/regression/cbmc-with-incr/Pointer_byte_extract8/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c --all-properties --bounds-check --32 --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Pointer_difference1/test.desc b/regression/cbmc-with-incr/Pointer_difference1/test.desc index 466da18b2b5..f98f52c58e3 100644 --- a/regression/cbmc-with-incr/Pointer_difference1/test.desc +++ b/regression/cbmc-with-incr/Pointer_difference1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Promotion1/test.desc b/regression/cbmc-with-incr/Promotion1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Promotion1/test.desc +++ b/regression/cbmc-with-incr/Promotion1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Promotion2/test.desc b/regression/cbmc-with-incr/Promotion2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Promotion2/test.desc +++ b/regression/cbmc-with-incr/Promotion2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Quantifiers1/test.desc b/regression/cbmc-with-incr/Quantifiers1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Quantifiers1/test.desc +++ b/regression/cbmc-with-incr/Quantifiers1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Recursion1/test.desc b/regression/cbmc-with-incr/Recursion1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Recursion1/test.desc +++ b/regression/cbmc-with-incr/Recursion1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Recursion2/test.desc b/regression/cbmc-with-incr/Recursion2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Recursion2/test.desc +++ b/regression/cbmc-with-incr/Recursion2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Recursion3/test.desc b/regression/cbmc-with-incr/Recursion3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Recursion3/test.desc +++ b/regression/cbmc-with-incr/Recursion3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Recursion4/test.desc b/regression/cbmc-with-incr/Recursion4/test.desc index cbd90510599..415020cf03f 100644 --- a/regression/cbmc-with-incr/Recursion4/test.desc +++ b/regression/cbmc-with-incr/Recursion4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-propagation ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Recursion5/test.desc b/regression/cbmc-with-incr/Recursion5/test.desc index 8e070292fba..1c9b5265bd0 100644 --- a/regression/cbmc-with-incr/Recursion5/test.desc +++ b/regression/cbmc-with-incr/Recursion5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --earliest-loop-exit ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Recursion6/test.desc b/regression/cbmc-with-incr/Recursion6/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Recursion6/test.desc +++ b/regression/cbmc-with-incr/Recursion6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Sideeffects1/test.desc b/regression/cbmc-with-incr/Sideeffects1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Sideeffects1/test.desc +++ b/regression/cbmc-with-incr/Sideeffects1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Sideeffects2/test.desc b/regression/cbmc-with-incr/Sideeffects2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Sideeffects2/test.desc +++ b/regression/cbmc-with-incr/Sideeffects2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Sideeffects3/test.desc b/regression/cbmc-with-incr/Sideeffects3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Sideeffects3/test.desc +++ b/regression/cbmc-with-incr/Sideeffects3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Sideeffects4/test.desc b/regression/cbmc-with-incr/Sideeffects4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Sideeffects4/test.desc +++ b/regression/cbmc-with-incr/Sideeffects4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Sideeffects5/test.desc b/regression/cbmc-with-incr/Sideeffects5/test.desc index e69488b2e66..2e26534178b 100644 --- a/regression/cbmc-with-incr/Sideeffects5/test.desc +++ b/regression/cbmc-with-incr/Sideeffects5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --div-by-zero-check ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Sideeffects6/test.desc b/regression/cbmc-with-incr/Sideeffects6/test.desc index e69488b2e66..2e26534178b 100644 --- a/regression/cbmc-with-incr/Sideeffects6/test.desc +++ b/regression/cbmc-with-incr/Sideeffects6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --div-by-zero-check ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Static2/test.desc b/regression/cbmc-with-incr/Static2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Static2/test.desc +++ b/regression/cbmc-with-incr/Static2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Static_Functions1/test.desc b/regression/cbmc-with-incr/Static_Functions1/test.desc index 8a09111c3b1..de55fd28989 100644 --- a/regression/cbmc-with-incr/Static_Functions1/test.desc +++ b/regression/cbmc-with-incr/Static_Functions1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE file1.c file2.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/String1/test.desc b/regression/cbmc-with-incr/String1/test.desc index 96c9b4bcd7b..b1749fa8cd6 100644 --- a/regression/cbmc-with-incr/String1/test.desc +++ b/regression/cbmc-with-incr/String1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check --bounds-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/String2/test.desc b/regression/cbmc-with-incr/String2/test.desc index 75352ab9ea5..f632dbb059b 100644 --- a/regression/cbmc-with-incr/String2/test.desc +++ b/regression/cbmc-with-incr/String2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check --bounds-check ^EXIT=10$ diff --git a/regression/cbmc-with-incr/String3/test.desc b/regression/cbmc-with-incr/String3/test.desc index e19d0a66341..f632dbb059b 100644 --- a/regression/cbmc-with-incr/String3/test.desc +++ b/regression/cbmc-with-incr/String3/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c --pointer-check --bounds-check ^EXIT=10$ diff --git a/regression/cbmc-with-incr/String4/test.desc b/regression/cbmc-with-incr/String4/test.desc index 96c9b4bcd7b..b1749fa8cd6 100644 --- a/regression/cbmc-with-incr/String4/test.desc +++ b/regression/cbmc-with-incr/String4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check --bounds-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/String5/test.desc b/regression/cbmc-with-incr/String5/test.desc index 96c9b4bcd7b..b1749fa8cd6 100644 --- a/regression/cbmc-with-incr/String5/test.desc +++ b/regression/cbmc-with-incr/String5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check --bounds-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/String6/test.desc b/regression/cbmc-with-incr/String6/test.desc index 96c9b4bcd7b..b1749fa8cd6 100644 --- a/regression/cbmc-with-incr/String6/test.desc +++ b/regression/cbmc-with-incr/String6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check --bounds-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/String7/test.desc b/regression/cbmc-with-incr/String7/test.desc index 96c9b4bcd7b..b1749fa8cd6 100644 --- a/regression/cbmc-with-incr/String7/test.desc +++ b/regression/cbmc-with-incr/String7/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check --bounds-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/String_Literal1/test.desc b/regression/cbmc-with-incr/String_Literal1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/String_Literal1/test.desc +++ b/regression/cbmc-with-incr/String_Literal1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Struct_Bytewise1/test.desc b/regression/cbmc-with-incr/Struct_Bytewise1/test.desc index 03ad7634d7c..da870488cb7 100644 --- a/regression/cbmc-with-incr/Struct_Bytewise1/test.desc +++ b/regression/cbmc-with-incr/Struct_Bytewise1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE struct_bytewise.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Struct_Bytewise2/test.desc b/regression/cbmc-with-incr/Struct_Bytewise2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Struct_Bytewise2/test.desc +++ b/regression/cbmc-with-incr/Struct_Bytewise2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Struct_Initialization1/test.desc b/regression/cbmc-with-incr/Struct_Initialization1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Struct_Initialization1/test.desc +++ b/regression/cbmc-with-incr/Struct_Initialization1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Struct_Initialization10/test.desc b/regression/cbmc-with-incr/Struct_Initialization10/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Struct_Initialization10/test.desc +++ b/regression/cbmc-with-incr/Struct_Initialization10/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Struct_Initialization2/test.desc b/regression/cbmc-with-incr/Struct_Initialization2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Struct_Initialization2/test.desc +++ b/regression/cbmc-with-incr/Struct_Initialization2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Struct_Initialization3/test.desc b/regression/cbmc-with-incr/Struct_Initialization3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Struct_Initialization3/test.desc +++ b/regression/cbmc-with-incr/Struct_Initialization3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Struct_Initialization4/test.desc b/regression/cbmc-with-incr/Struct_Initialization4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Struct_Initialization4/test.desc +++ b/regression/cbmc-with-incr/Struct_Initialization4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Struct_Initialization5/test.desc b/regression/cbmc-with-incr/Struct_Initialization5/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Struct_Initialization5/test.desc +++ b/regression/cbmc-with-incr/Struct_Initialization5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Struct_Initialization6/test.desc b/regression/cbmc-with-incr/Struct_Initialization6/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Struct_Initialization6/test.desc +++ b/regression/cbmc-with-incr/Struct_Initialization6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Struct_Initialization7/test.desc b/regression/cbmc-with-incr/Struct_Initialization7/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Struct_Initialization7/test.desc +++ b/regression/cbmc-with-incr/Struct_Initialization7/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Struct_Initialization9/test.desc b/regression/cbmc-with-incr/Struct_Initialization9/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Struct_Initialization9/test.desc +++ b/regression/cbmc-with-incr/Struct_Initialization9/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Struct_Padding1/test.desc b/regression/cbmc-with-incr/Struct_Padding1/test.desc index 0098f266ed3..7d82bcc8fbb 100644 --- a/regression/cbmc-with-incr/Struct_Padding1/test.desc +++ b/regression/cbmc-with-incr/Struct_Padding1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --32 ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Typecast1/test.desc b/regression/cbmc-with-incr/Typecast1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Typecast1/test.desc +++ b/regression/cbmc-with-incr/Typecast1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Typecast2/test.desc b/regression/cbmc-with-incr/Typecast2/test.desc index 1af9f7644e7..2f9be87fcce 100644 --- a/regression/cbmc-with-incr/Typecast2/test.desc +++ b/regression/cbmc-with-incr/Typecast2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-propagation --64 ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Undefined_Function1/test.desc b/regression/cbmc-with-incr/Undefined_Function1/test.desc index d29ea2fc36e..56d593a23d6 100644 --- a/regression/cbmc-with-incr/Undefined_Function1/test.desc +++ b/regression/cbmc-with-incr/Undefined_Function1/test.desc @@ -1,9 +1,9 @@ -CORE +FUTURE main.c +^EXIT=10$ ^SIGNAL=0$ ^\*\*\*\* WARNING: no body for function f$ -^Counterexample:$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/cbmc-with-incr/Union_Initialization1/test.desc b/regression/cbmc-with-incr/Union_Initialization1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Union_Initialization1/test.desc +++ b/regression/cbmc-with-incr/Union_Initialization1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Unwinding_Locality1/test.desc b/regression/cbmc-with-incr/Unwinding_Locality1/test.desc index 33900ad2b78..4aa47233d39 100644 --- a/regression/cbmc-with-incr/Unwinding_Locality1/test.desc +++ b/regression/cbmc-with-incr/Unwinding_Locality1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Visual_Studio_Types1/test.desc b/regression/cbmc-with-incr/Visual_Studio_Types1/test.desc index e59b02c324d..481c817218a 100644 --- a/regression/cbmc-with-incr/Visual_Studio_Types1/test.desc +++ b/regression/cbmc-with-incr/Visual_Studio_Types1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --i386-win32 ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Visual_Studio_Types2/test.desc b/regression/cbmc-with-incr/Visual_Studio_Types2/test.desc index 7ce542782ab..7b07e0dc555 100644 --- a/regression/cbmc-with-incr/Visual_Studio_Types2/test.desc +++ b/regression/cbmc-with-incr/Visual_Studio_Types2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --winx64 ^EXIT=0$ diff --git a/regression/cbmc-with-incr/Volatile1/test.desc b/regression/cbmc-with-incr/Volatile1/test.desc index 6b765c70f48..b9b38f2c4b4 100644 --- a/regression/cbmc-with-incr/Volatile1/test.desc +++ b/regression/cbmc-with-incr/Volatile1/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/Zero_Initialization1/test.desc b/regression/cbmc-with-incr/Zero_Initialization1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/Zero_Initialization1/test.desc +++ b/regression/cbmc-with-incr/Zero_Initialization1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/__func__1/test.desc b/regression/cbmc-with-incr/__func__1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/__func__1/test.desc +++ b/regression/cbmc-with-incr/__func__1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/abs1/test.desc b/regression/cbmc-with-incr/abs1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/abs1/test.desc +++ b/regression/cbmc-with-incr/abs1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/argv1/test.desc b/regression/cbmc-with-incr/argv1/test.desc index da239c1965b..6550ede8bf0 100644 --- a/regression/cbmc-with-incr/argv1/test.desc +++ b/regression/cbmc-with-incr/argv1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --bounds-check --pointer-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/atomic_section_seq1/test.desc b/regression/cbmc-with-incr/atomic_section_seq1/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-with-incr/atomic_section_seq1/test.desc +++ b/regression/cbmc-with-incr/atomic_section_seq1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/char1/test.desc b/regression/cbmc-with-incr/char1/test.desc index ec0541ac9fc..a269860affb 100644 --- a/regression/cbmc-with-incr/char1/test.desc +++ b/regression/cbmc-with-incr/char1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --unsigned-char ^EXIT=0$ diff --git a/regression/cbmc-with-incr/character_handling1/test.desc b/regression/cbmc-with-incr/character_handling1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/character_handling1/test.desc +++ b/regression/cbmc-with-incr/character_handling1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/comma1/test.desc b/regression/cbmc-with-incr/comma1/test.desc index 12fc8ce06e1..8681f1ad0e1 100644 --- a/regression/cbmc-with-incr/comma1/test.desc +++ b/regression/cbmc-with-incr/comma1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/complex1/test.desc b/regression/cbmc-with-incr/complex1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/complex1/test.desc +++ b/regression/cbmc-with-incr/complex1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/compound_literal1/test.desc b/regression/cbmc-with-incr/compound_literal1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/compound_literal1/test.desc +++ b/regression/cbmc-with-incr/compound_literal1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/const_ptr1/test.desc b/regression/cbmc-with-incr/const_ptr1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/const_ptr1/test.desc +++ b/regression/cbmc-with-incr/const_ptr1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/enum1/test.desc b/regression/cbmc-with-incr/enum1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/enum1/test.desc +++ b/regression/cbmc-with-incr/enum1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/enum2/test.desc b/regression/cbmc-with-incr/enum2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/enum2/test.desc +++ b/regression/cbmc-with-incr/enum2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/enum3/test.desc b/regression/cbmc-with-incr/enum3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/enum3/test.desc +++ b/regression/cbmc-with-incr/enum3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/enum4/test.desc b/regression/cbmc-with-incr/enum4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/enum4/test.desc +++ b/regression/cbmc-with-incr/enum4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_array1/test.desc b/regression/cbmc-with-incr/equality_through_array1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_array1/test.desc +++ b/regression/cbmc-with-incr/equality_through_array1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_array2/test.desc b/regression/cbmc-with-incr/equality_through_array2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_array2/test.desc +++ b/regression/cbmc-with-incr/equality_through_array2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_array3/test.desc b/regression/cbmc-with-incr/equality_through_array3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_array3/test.desc +++ b/regression/cbmc-with-incr/equality_through_array3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_array4/test.desc b/regression/cbmc-with-incr/equality_through_array4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_array4/test.desc +++ b/regression/cbmc-with-incr/equality_through_array4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_array5/test.desc b/regression/cbmc-with-incr/equality_through_array5/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_array5/test.desc +++ b/regression/cbmc-with-incr/equality_through_array5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_array6/test.desc b/regression/cbmc-with-incr/equality_through_array6/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_array6/test.desc +++ b/regression/cbmc-with-incr/equality_through_array6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_array_of_struct1/test.desc b/regression/cbmc-with-incr/equality_through_array_of_struct1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_array_of_struct1/test.desc +++ b/regression/cbmc-with-incr/equality_through_array_of_struct1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_array_of_struct2/test.desc b/regression/cbmc-with-incr/equality_through_array_of_struct2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_array_of_struct2/test.desc +++ b/regression/cbmc-with-incr/equality_through_array_of_struct2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_array_of_struct3/test.desc b/regression/cbmc-with-incr/equality_through_array_of_struct3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_array_of_struct3/test.desc +++ b/regression/cbmc-with-incr/equality_through_array_of_struct3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_array_of_struct4/test.desc b/regression/cbmc-with-incr/equality_through_array_of_struct4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_array_of_struct4/test.desc +++ b/regression/cbmc-with-incr/equality_through_array_of_struct4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_struct1/test.desc b/regression/cbmc-with-incr/equality_through_struct1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_struct1/test.desc +++ b/regression/cbmc-with-incr/equality_through_struct1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_struct2/test.desc b/regression/cbmc-with-incr/equality_through_struct2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_struct2/test.desc +++ b/regression/cbmc-with-incr/equality_through_struct2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_struct3/test.desc b/regression/cbmc-with-incr/equality_through_struct3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_struct3/test.desc +++ b/regression/cbmc-with-incr/equality_through_struct3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_struct4/test.desc b/regression/cbmc-with-incr/equality_through_struct4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_struct4/test.desc +++ b/regression/cbmc-with-incr/equality_through_struct4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_struct5/test.desc b/regression/cbmc-with-incr/equality_through_struct5/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_struct5/test.desc +++ b/regression/cbmc-with-incr/equality_through_struct5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_struct_containing_arrays1/test.desc b/regression/cbmc-with-incr/equality_through_struct_containing_arrays1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_struct_containing_arrays1/test.desc +++ b/regression/cbmc-with-incr/equality_through_struct_containing_arrays1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_struct_containing_arrays2/test.desc b/regression/cbmc-with-incr/equality_through_struct_containing_arrays2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_struct_containing_arrays2/test.desc +++ b/regression/cbmc-with-incr/equality_through_struct_containing_arrays2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_struct_containing_arrays3/test.desc b/regression/cbmc-with-incr/equality_through_struct_containing_arrays3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_struct_containing_arrays3/test.desc +++ b/regression/cbmc-with-incr/equality_through_struct_containing_arrays3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_union1/test.desc b/regression/cbmc-with-incr/equality_through_union1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_union1/test.desc +++ b/regression/cbmc-with-incr/equality_through_union1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_union2/test.desc b/regression/cbmc-with-incr/equality_through_union2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_union2/test.desc +++ b/regression/cbmc-with-incr/equality_through_union2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/equality_through_union3/test.desc b/regression/cbmc-with-incr/equality_through_union3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/equality_through_union3/test.desc +++ b/regression/cbmc-with-incr/equality_through_union3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/exit1/test.desc b/regression/cbmc-with-incr/exit1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/exit1/test.desc +++ b/regression/cbmc-with-incr/exit1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/extern_initialization1/test.desc b/regression/cbmc-with-incr/extern_initialization1/test.desc index 73b0a6abe16..eec83417ba2 100644 --- a/regression/cbmc-with-incr/extern_initialization1/test.desc +++ b/regression/cbmc-with-incr/extern_initialization1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE file1.c file2.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/extern_initialization2/test.desc b/regression/cbmc-with-incr/extern_initialization2/test.desc index 8a09111c3b1..de55fd28989 100644 --- a/regression/cbmc-with-incr/extern_initialization2/test.desc +++ b/regression/cbmc-with-incr/extern_initialization2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE file1.c file2.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/for-break1/test.desc b/regression/cbmc-with-incr/for-break1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/for-break1/test.desc +++ b/regression/cbmc-with-incr/for-break1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/for1/test.desc b/regression/cbmc-with-incr/for1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/for1/test.desc +++ b/regression/cbmc-with-incr/for1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/for2/test.desc b/regression/cbmc-with-incr/for2/test.desc index ae05c84a478..6b3369f42a1 100644 --- a/regression/cbmc-with-incr/for2/test.desc +++ b/regression/cbmc-with-incr/for2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/for3/test.desc b/regression/cbmc-with-incr/for3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/for3/test.desc +++ b/regression/cbmc-with-incr/for3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/function_option1/test.desc b/regression/cbmc-with-incr/function_option1/test.desc index 521d7365c2f..43cc7501c6e 100644 --- a/regression/cbmc-with-incr/function_option1/test.desc +++ b/regression/cbmc-with-incr/function_option1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --function f ^EXIT=0$ diff --git a/regression/cbmc-with-incr/gcc_c99-bool-1/test.desc b/regression/cbmc-with-incr/gcc_c99-bool-1/test.desc index d82c02459fc..1a11f07f85c 100644 --- a/regression/cbmc-with-incr/gcc_c99-bool-1/test.desc +++ b/regression/cbmc-with-incr/gcc_c99-bool-1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE c99-bool-1.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/gcc_conditional_expr1/test.desc b/regression/cbmc-with-incr/gcc_conditional_expr1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/gcc_conditional_expr1/test.desc +++ b/regression/cbmc-with-incr/gcc_conditional_expr1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/gcc_local_label1/test.desc b/regression/cbmc-with-incr/gcc_local_label1/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-with-incr/gcc_local_label1/test.desc +++ b/regression/cbmc-with-incr/gcc_local_label1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/gcc_statement_expression1/test.desc b/regression/cbmc-with-incr/gcc_statement_expression1/test.desc index 9c96469df12..fb6666914d4 100644 --- a/regression/cbmc-with-incr/gcc_statement_expression1/test.desc +++ b/regression/cbmc-with-incr/gcc_statement_expression1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/gcc_statement_expression2/test.desc b/regression/cbmc-with-incr/gcc_statement_expression2/test.desc index 9c96469df12..fb6666914d4 100644 --- a/regression/cbmc-with-incr/gcc_statement_expression2/test.desc +++ b/regression/cbmc-with-incr/gcc_statement_expression2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/gcc_statement_expression3/test.desc b/regression/cbmc-with-incr/gcc_statement_expression3/test.desc index 9c96469df12..fb6666914d4 100644 --- a/regression/cbmc-with-incr/gcc_statement_expression3/test.desc +++ b/regression/cbmc-with-incr/gcc_statement_expression3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/gcc_statement_expression4/test.desc b/regression/cbmc-with-incr/gcc_statement_expression4/test.desc index 9c96469df12..fb6666914d4 100644 --- a/regression/cbmc-with-incr/gcc_statement_expression4/test.desc +++ b/regression/cbmc-with-incr/gcc_statement_expression4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/gcc_statement_expression5/test.desc b/regression/cbmc-with-incr/gcc_statement_expression5/test.desc index 9c96469df12..fb6666914d4 100644 --- a/regression/cbmc-with-incr/gcc_statement_expression5/test.desc +++ b/regression/cbmc-with-incr/gcc_statement_expression5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/gcc_vector1/test.desc b/regression/cbmc-with-incr/gcc_vector1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/gcc_vector1/test.desc +++ b/regression/cbmc-with-incr/gcc_vector1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/gcc_vector2/test.desc b/regression/cbmc-with-incr/gcc_vector2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/gcc_vector2/test.desc +++ b/regression/cbmc-with-incr/gcc_vector2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/goto1/test.desc b/regression/cbmc-with-incr/goto1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/goto1/test.desc +++ b/regression/cbmc-with-incr/goto1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/goto2/test.desc b/regression/cbmc-with-incr/goto2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/goto2/test.desc +++ b/regression/cbmc-with-incr/goto2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/goto3/test.desc b/regression/cbmc-with-incr/goto3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/goto3/test.desc +++ b/regression/cbmc-with-incr/goto3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/goto4/test.desc b/regression/cbmc-with-incr/goto4/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-with-incr/goto4/test.desc +++ b/regression/cbmc-with-incr/goto4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/if1/test.desc b/regression/cbmc-with-incr/if1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/if1/test.desc +++ b/regression/cbmc-with-incr/if1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/if2/test.desc b/regression/cbmc-with-incr/if2/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-with-incr/if2/test.desc +++ b/regression/cbmc-with-incr/if2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/if3/test.desc b/regression/cbmc-with-incr/if3/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-with-incr/if3/test.desc +++ b/regression/cbmc-with-incr/if3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/if4/test.desc b/regression/cbmc-with-incr/if4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/if4/test.desc +++ b/regression/cbmc-with-incr/if4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/inline1/test.desc b/regression/cbmc-with-incr/inline1/test.desc index af20f90c655..b302e1734c3 100644 --- a/regression/cbmc-with-incr/inline1/test.desc +++ b/regression/cbmc-with-incr/inline1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c module.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/int-to-float1/test.desc b/regression/cbmc-with-incr/int-to-float1/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/int-to-float1/test.desc +++ b/regression/cbmc-with-incr/int-to-float1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/int-to-float2/test.desc b/regression/cbmc-with-incr/int-to-float2/test.desc index b7d95a28215..3d655761041 100644 --- a/regression/cbmc-with-incr/int-to-float2/test.desc +++ b/regression/cbmc-with-incr/int-to-float2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --floatbv ^EXIT=0$ diff --git a/regression/cbmc-with-incr/locations1/test.desc b/regression/cbmc-with-incr/locations1/test.desc index 12c44d464cd..2521c59483c 100644 --- a/regression/cbmc-with-incr/locations1/test.desc +++ b/regression/cbmc-with-incr/locations1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --signed-overflow-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/noop1/test.desc b/regression/cbmc-with-incr/noop1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/noop1/test.desc +++ b/regression/cbmc-with-incr/noop1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/null1/test.desc b/regression/cbmc-with-incr/null1/test.desc index 376d43d5dfa..b7c95d95569 100644 --- a/regression/cbmc-with-incr/null1/test.desc +++ b/regression/cbmc-with-incr/null1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --no-simplify ^EXIT=0$ diff --git a/regression/cbmc-with-incr/null2/test.desc b/regression/cbmc-with-incr/null2/test.desc index 1d6654a4859..25a63f0fbdc 100644 --- a/regression/cbmc-with-incr/null2/test.desc +++ b/regression/cbmc-with-incr/null2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/offsetof1/test.desc b/regression/cbmc-with-incr/offsetof1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/offsetof1/test.desc +++ b/regression/cbmc-with-incr/offsetof1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/pipe1/test.desc b/regression/cbmc-with-incr/pipe1/test.desc index 0d1e9fa0dba..0a7701cc8f6 100644 --- a/regression/cbmc-with-incr/pipe1/test.desc +++ b/regression/cbmc-with-incr/pipe1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --all-properties ^EXIT=10$ diff --git a/regression/cbmc-with-incr/realloc1/test.desc b/regression/cbmc-with-incr/realloc1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/realloc1/test.desc +++ b/regression/cbmc-with-incr/realloc1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/return1/test.desc b/regression/cbmc-with-incr/return1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/return1/test.desc +++ b/regression/cbmc-with-incr/return1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/return3/test.desc b/regression/cbmc-with-incr/return3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/return3/test.desc +++ b/regression/cbmc-with-incr/return3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/return4/test.desc b/regression/cbmc-with-incr/return4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/return4/test.desc +++ b/regression/cbmc-with-incr/return4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/return5/test.desc b/regression/cbmc-with-incr/return5/test.desc index 6de79559914..b9b38f2c4b4 100644 --- a/regression/cbmc-with-incr/return5/test.desc +++ b/regression/cbmc-with-incr/return5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/strtol1/test.desc b/regression/cbmc-with-incr/strtol1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/strtol1/test.desc +++ b/regression/cbmc-with-incr/strtol1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/strtol2/test.desc b/regression/cbmc-with-incr/strtol2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/strtol2/test.desc +++ b/regression/cbmc-with-incr/strtol2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/struct1/test.desc b/regression/cbmc-with-incr/struct1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/struct1/test.desc +++ b/regression/cbmc-with-incr/struct1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/struct3/test.desc b/regression/cbmc-with-incr/struct3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/struct3/test.desc +++ b/regression/cbmc-with-incr/struct3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/struct4/test.desc b/regression/cbmc-with-incr/struct4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/struct4/test.desc +++ b/regression/cbmc-with-incr/struct4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/struct6/test.desc b/regression/cbmc-with-incr/struct6/test.desc index da239c1965b..6550ede8bf0 100644 --- a/regression/cbmc-with-incr/struct6/test.desc +++ b/regression/cbmc-with-incr/struct6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --bounds-check --pointer-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/struct7/test.desc b/regression/cbmc-with-incr/struct7/test.desc index 96c9b4bcd7b..b1749fa8cd6 100644 --- a/regression/cbmc-with-incr/struct7/test.desc +++ b/regression/cbmc-with-incr/struct7/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --pointer-check --bounds-check ^EXIT=0$ diff --git a/regression/cbmc-with-incr/struct8/test.desc b/regression/cbmc-with-incr/struct8/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/struct8/test.desc +++ b/regression/cbmc-with-incr/struct8/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/switch1/test.desc b/regression/cbmc-with-incr/switch1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/switch1/test.desc +++ b/regression/cbmc-with-incr/switch1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/switch2/test.desc b/regression/cbmc-with-incr/switch2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/switch2/test.desc +++ b/regression/cbmc-with-incr/switch2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/switch3/test.desc b/regression/cbmc-with-incr/switch3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/switch3/test.desc +++ b/regression/cbmc-with-incr/switch3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/switch4/test.desc b/regression/cbmc-with-incr/switch4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/switch4/test.desc +++ b/regression/cbmc-with-incr/switch4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/switch5/test.desc b/regression/cbmc-with-incr/switch5/test.desc index 33900ad2b78..4aa47233d39 100644 --- a/regression/cbmc-with-incr/switch5/test.desc +++ b/regression/cbmc-with-incr/switch5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/switch6/test.desc b/regression/cbmc-with-incr/switch6/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/switch6/test.desc +++ b/regression/cbmc-with-incr/switch6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/union1/test.desc b/regression/cbmc-with-incr/union1/test.desc index 52168c7eba4..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/union1/test.desc +++ b/regression/cbmc-with-incr/union1/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/union2/test.desc b/regression/cbmc-with-incr/union2/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/union2/test.desc +++ b/regression/cbmc-with-incr/union2/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/union3/test.desc b/regression/cbmc-with-incr/union3/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/union3/test.desc +++ b/regression/cbmc-with-incr/union3/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/union4/test.desc b/regression/cbmc-with-incr/union4/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/union4/test.desc +++ b/regression/cbmc-with-incr/union4/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/union5/test.desc b/regression/cbmc-with-incr/union5/test.desc index 33900ad2b78..4aa47233d39 100644 --- a/regression/cbmc-with-incr/union5/test.desc +++ b/regression/cbmc-with-incr/union5/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=10$ diff --git a/regression/cbmc-with-incr/union6/test.desc b/regression/cbmc-with-incr/union6/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/union6/test.desc +++ b/regression/cbmc-with-incr/union6/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/unsigned_char1/test.desc b/regression/cbmc-with-incr/unsigned_char1/test.desc index 0f995fec257..c61e9a874a1 100644 --- a/regression/cbmc-with-incr/unsigned_char1/test.desc +++ b/regression/cbmc-with-incr/unsigned_char1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c --unsigned-char ^EXIT=0$ diff --git a/regression/cbmc-with-incr/va_list1/test.desc b/regression/cbmc-with-incr/va_list1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/va_list1/test.desc +++ b/regression/cbmc-with-incr/va_list1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/va_list2/test.desc b/regression/cbmc-with-incr/va_list2/test.desc index 52168c7eba4..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/va_list2/test.desc +++ b/regression/cbmc-with-incr/va_list2/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/void_ifthenelse/test.desc b/regression/cbmc-with-incr/void_ifthenelse/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/void_ifthenelse/test.desc +++ b/regression/cbmc-with-incr/void_ifthenelse/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/cbmc-with-incr/while1/test.desc b/regression/cbmc-with-incr/while1/test.desc index 9efefbc7362..aea17ee4da8 100644 --- a/regression/cbmc-with-incr/while1/test.desc +++ b/regression/cbmc-with-incr/while1/test.desc @@ -1,4 +1,4 @@ -CORE +FUTURE main.c ^EXIT=0$ diff --git a/regression/contracts/chain.sh b/regression/contracts/chain.sh index a22dc195bdc..b79aae965bb 100755 --- a/regression/contracts/chain.sh +++ b/regression/contracts/chain.sh @@ -11,6 +11,14 @@ name=${*:$#} name=${name%.c} args=${*:5:$#-5} +if [[ "$args" != *" _ "* ]] +then + args_inst=$args + args_cbmc="" +else + args_inst="${args%%" _ "*}" + args_cbmc="${args#*" _ "}" +fi if [[ "${is_windows}" == "true" ]]; then $goto_cc "${name}.c" @@ -20,10 +28,10 @@ else fi rm -f "${name}-mod.gb" -$goto_instrument ${args} "${name}.gb" "${name}-mod.gb" +$goto_instrument ${args_inst} "${name}.gb" "${name}-mod.gb" if [ ! -e "${name}-mod.gb" ] ; then cp "$name.gb" "${name}-mod.gb" -elif echo $args | grep -q -- "--dump-c" ; then +elif echo $args_inst | grep -q -- "--dump-c" ; then mv "${name}-mod.gb" "${name}-mod.c" if [[ "${is_windows}" == "true" ]]; then @@ -36,4 +44,4 @@ elif echo $args | grep -q -- "--dump-c" ; then rm "${name}-mod.c" fi $goto_instrument --show-goto-functions "${name}-mod.gb" -$cbmc "${name}-mod.gb" +$cbmc "${name}-mod.gb" ${args_cbmc} diff --git a/regression/contracts/function-calls-01/main.c b/regression/contracts/function-calls-01/main.c new file mode 100644 index 00000000000..26f8445d361 --- /dev/null +++ b/regression/contracts/function-calls-01/main.c @@ -0,0 +1,14 @@ +int f1(int *x1) __CPROVER_requires(*x1 > 1 && *x1 < 10000) + __CPROVER_ensures(__CPROVER_return_value == *x1 + 1) +{ + return *x1 + 1; +} + +int main() +{ + int p; + __CPROVER_assume(p > 1 && p < 10000); + f1(&p); + + return 0; +} diff --git a/regression/contracts/function-calls-01/test-enf.desc b/regression/contracts/function-calls-01/test-enf.desc new file mode 100644 index 00000000000..1b660f56d87 --- /dev/null +++ b/regression/contracts/function-calls-01/test-enf.desc @@ -0,0 +1,12 @@ +CORE +main.c +--enforce-all-contracts +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | assumed | asserted diff --git a/regression/contracts/function-calls-01/test-rep.desc b/regression/contracts/function-calls-01/test-rep.desc new file mode 100644 index 00000000000..d28bfcfb20b --- /dev/null +++ b/regression/contracts/function-calls-01/test-rep.desc @@ -0,0 +1,12 @@ +CORE +main.c +--replace-all-calls-with-contracts +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | asserted | assumed diff --git a/regression/contracts/function-calls-02-1/main.c b/regression/contracts/function-calls-02-1/main.c new file mode 100644 index 00000000000..43a06e3ef3b --- /dev/null +++ b/regression/contracts/function-calls-02-1/main.c @@ -0,0 +1,21 @@ +int f1(int *x1) __CPROVER_requires(*x1 > 1 && *x1 < 10000) + __CPROVER_ensures(__CPROVER_return_value == *x1 + 3) +{ + int loc = *x1 + 1; + return f2(&loc) + 1; +} + +int f2(int *x2) __CPROVER_requires(*x2 > 2 && *x2 < 10001) + __CPROVER_ensures(__CPROVER_return_value == *x2 + 1) +{ + return *x2 + 1; +} + +int main() +{ + int p; + __CPROVER_assume(p > 1 && p < 10000); + f1(&p); + + return 0; +} \ No newline at end of file diff --git a/regression/contracts/function-calls-02-1/test-enf.desc b/regression/contracts/function-calls-02-1/test-enf.desc new file mode 100644 index 00000000000..817b7b9c8d8 --- /dev/null +++ b/regression/contracts/function-calls-02-1/test-enf.desc @@ -0,0 +1,16 @@ +KNOWNBUG +main.c +--enforce-all-contracts +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | assumed | asserted + f2 | assumed | asserted + +Known bug: +Enforce flag not handled correctly for function calls within functions. diff --git a/regression/contracts/function-calls-02-1/test-mix.desc b/regression/contracts/function-calls-02-1/test-mix.desc new file mode 100644 index 00000000000..edd25ca30be --- /dev/null +++ b/regression/contracts/function-calls-02-1/test-mix.desc @@ -0,0 +1,13 @@ +CORE +main.c +--enforce-contract f1 --replace-call-with-contract f2 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | assumed | asserted + f2 | asserted | assumed diff --git a/regression/contracts/function-calls-02-1/test-rep.desc b/regression/contracts/function-calls-02-1/test-rep.desc new file mode 100644 index 00000000000..707cdf87fc8 --- /dev/null +++ b/regression/contracts/function-calls-02-1/test-rep.desc @@ -0,0 +1,15 @@ +CORE +main.c +--replace-all-calls-with-contracts +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | asserted | assumed + f2 | n/a | n/a + +Note: the call to f2 does not occur because the call to f1 is replaced by its contracts. diff --git a/regression/contracts/function-calls-02/main.c b/regression/contracts/function-calls-02/main.c new file mode 100644 index 00000000000..9c698ec912d --- /dev/null +++ b/regression/contracts/function-calls-02/main.c @@ -0,0 +1,20 @@ +int f1(int *x1) __CPROVER_requires(*x1 > 1 && *x1 < 10000) + __CPROVER_ensures(__CPROVER_return_value == *x1 + 2) +{ + return f2(x1) + 1; +} + +int f2(int *x2) __CPROVER_requires(*x2 > 1 && *x2 < 10000) + __CPROVER_ensures(__CPROVER_return_value == *x2 + 1) +{ + return *x2 + 1; +} + +int main() +{ + int p; + __CPROVER_assume(p > 1 && p < 10000); + f1(&p); + + return 0; +} diff --git a/regression/contracts/function-calls-02/test-enf.desc b/regression/contracts/function-calls-02/test-enf.desc new file mode 100644 index 00000000000..817b7b9c8d8 --- /dev/null +++ b/regression/contracts/function-calls-02/test-enf.desc @@ -0,0 +1,16 @@ +KNOWNBUG +main.c +--enforce-all-contracts +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | assumed | asserted + f2 | assumed | asserted + +Known bug: +Enforce flag not handled correctly for function calls within functions. diff --git a/regression/contracts/function-calls-02/test-mix.desc b/regression/contracts/function-calls-02/test-mix.desc new file mode 100644 index 00000000000..edd25ca30be --- /dev/null +++ b/regression/contracts/function-calls-02/test-mix.desc @@ -0,0 +1,13 @@ +CORE +main.c +--enforce-contract f1 --replace-call-with-contract f2 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | assumed | asserted + f2 | asserted | assumed diff --git a/regression/contracts/function-calls-02/test-rep.desc b/regression/contracts/function-calls-02/test-rep.desc new file mode 100644 index 00000000000..707cdf87fc8 --- /dev/null +++ b/regression/contracts/function-calls-02/test-rep.desc @@ -0,0 +1,15 @@ +CORE +main.c +--replace-all-calls-with-contracts +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | asserted | assumed + f2 | n/a | n/a + +Note: the call to f2 does not occur because the call to f1 is replaced by its contracts. diff --git a/regression/contracts/function-calls-03-1/main.c b/regression/contracts/function-calls-03-1/main.c new file mode 100644 index 00000000000..ed53e1e5d31 --- /dev/null +++ b/regression/contracts/function-calls-03-1/main.c @@ -0,0 +1,23 @@ +int f1(int *x1) __CPROVER_requires(*x1 > 0 && *x1 < 20) + __CPROVER_ensures(__CPROVER_return_value == *x1 + 2) +{ + return f2(x1) + 1; +} + +int f2(int *x2) __CPROVER_requires(*x2 >= 0 && *x2 < 20) + __CPROVER_ensures(__CPROVER_return_value == *x2 + 1) +{ + if(*x2 < 1) + return -1; //Notice the change for the base case + int loc = *x2 - 1; + return f2(&loc) + 1; +} + +int main() +{ + int p; + __CPROVER_assume(p > 0 && p < 20); + f1(&p); + + return 0; +} diff --git a/regression/contracts/function-calls-03-1/test-enf.desc b/regression/contracts/function-calls-03-1/test-enf.desc new file mode 100644 index 00000000000..859a593e234 --- /dev/null +++ b/regression/contracts/function-calls-03-1/test-enf.desc @@ -0,0 +1,19 @@ +CORE +main.c +--enforce-all-contracts _ --unwind 20 --unwinding-assertions +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | assumed | asserted + f2 | assumed | asserted + +Test should fail: +The postcondition of f2 is incorrect, considering the recursion particularity. + +Recursion: +The base case for the recursive call to f2 provides different behavior than the common case (given the pre-conditions). diff --git a/regression/contracts/function-calls-03/main.c b/regression/contracts/function-calls-03/main.c new file mode 100644 index 00000000000..203ffd82a70 --- /dev/null +++ b/regression/contracts/function-calls-03/main.c @@ -0,0 +1,23 @@ +int f1(int *x1) __CPROVER_requires(*x1 > 0 && *x1 < 20) + __CPROVER_ensures(__CPROVER_return_value == *x1 + 2) +{ + return f2(x1) + 1; +} + +int f2(int *x2) __CPROVER_requires(*x2 >= 0 && *x2 < 20) + __CPROVER_ensures(__CPROVER_return_value == *x2 + 1) +{ + if(*x2 < 1) + return 1; + int loc = *x2 - 1; + return f2(&loc) + 1; +} + +int main() +{ + int p; + __CPROVER_assume(p > 0 && p < 20); + f1(&p); + + return 0; +} diff --git a/regression/contracts/function-calls-03/test-enf.desc b/regression/contracts/function-calls-03/test-enf.desc new file mode 100644 index 00000000000..fdbd93aacd0 --- /dev/null +++ b/regression/contracts/function-calls-03/test-enf.desc @@ -0,0 +1,19 @@ +KNOWNBUG +main.c +--enforce-all-contracts _ --unwind 20 --unwinding-assertions +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | assumed | asserted + f2 | assumed | asserted + +Recursion: +The base case for the recursive call to f2 provides the same behavior as the common case (given the pre-conditions). + +Known bug: +Enforce flag not handled correctly for function calls within functions. diff --git a/regression/contracts/function-calls-03/test-mix.desc b/regression/contracts/function-calls-03/test-mix.desc new file mode 100644 index 00000000000..ffc11785616 --- /dev/null +++ b/regression/contracts/function-calls-03/test-mix.desc @@ -0,0 +1,16 @@ +CORE +main.c +--enforce-contract f1 --replace-call-with-contract f2 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | assumed | asserted + f2 | asserted | assumed + +Recursion: +The base case for the recursive call to f2 provides the same behavior as the common case (given the pre-conditions). diff --git a/regression/contracts/function-calls-03/test-rep.desc b/regression/contracts/function-calls-03/test-rep.desc new file mode 100644 index 00000000000..cca10ac941f --- /dev/null +++ b/regression/contracts/function-calls-03/test-rep.desc @@ -0,0 +1,18 @@ +CORE +main.c +--replace-all-calls-with-contracts +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | asserted | assumed + f2 | n/a | n/a + +Note: the call to f2 does not occur because the call to f1 is replaced by its contracts. + +Recursion: +The base case for the recursive call to f2 provides the same behavior as the common case (given the pre-conditions). diff --git a/regression/contracts/function-calls-04-1/main.c b/regression/contracts/function-calls-04-1/main.c new file mode 100644 index 00000000000..36136e08bd2 --- /dev/null +++ b/regression/contracts/function-calls-04-1/main.c @@ -0,0 +1,29 @@ +int f1(int *x1) __CPROVER_requires(*x1 > 0 && *x1 < 20) + __CPROVER_ensures(__CPROVER_return_value == *x1 + 2) +{ + return f2_out(x1) + 1; +} + +int f2_out(int *x2) __CPROVER_requires(*x2 >= 0 && *x2 < 20) + __CPROVER_ensures(__CPROVER_return_value == *x2 + 1) +{ + if(*x2 < 1) + return -1; //Notice the change for the base case + int loc2 = *x2 - 1; + return f2_in(&loc2) + 1; +} + +int f2_in(int *x2) __CPROVER_requires(*x2 >= 0 && *x2 < 19) + __CPROVER_ensures(__CPROVER_return_value == *x2 + 1) +{ + return f2_out(x2); +} + +int main() +{ + int p; + __CPROVER_assume(p > 0 && p < 20); + f1(&p); + + return 0; +} diff --git a/regression/contracts/function-calls-04-1/test-enf.desc b/regression/contracts/function-calls-04-1/test-enf.desc new file mode 100644 index 00000000000..4ca0e5e7948 --- /dev/null +++ b/regression/contracts/function-calls-04-1/test-enf.desc @@ -0,0 +1,20 @@ +CORE +main.c +--enforce-all-contracts _ --unwind 20 --unwinding-assertions +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | assumed | asserted + f2_out | assumed | asserted + f2_in | assumed | asserted + +Test should fail: +The postcondition of f2 is incorrect, considering the recursion particularity. + +Recursion: +The base case for the recursive call to f2 provides different behavior than the general case (given the pre-conditions). diff --git a/regression/contracts/function-calls-04/main.c b/regression/contracts/function-calls-04/main.c new file mode 100644 index 00000000000..f3aced38c72 --- /dev/null +++ b/regression/contracts/function-calls-04/main.c @@ -0,0 +1,29 @@ +int f1(int *x1) __CPROVER_requires(*x1 > 0 && *x1 < 20) + __CPROVER_ensures(__CPROVER_return_value == *x1 + 2) +{ + return f2_out(x1) + 1; +} + +int f2_out(int *x2) __CPROVER_requires(*x2 >= 0 && *x2 < 20) + __CPROVER_ensures(__CPROVER_return_value == *x2 + 1) +{ + if(*x2 < 1) + return 1; + int loc2 = *x2 - 1; + return f2_in(&loc2) + 1; +} + +int f2_in(int *x2) __CPROVER_requires(*x2 >= 0 && *x2 < 19) + __CPROVER_ensures(__CPROVER_return_value == *x2 + 1) +{ + return f2_out(x2); +} + +int main() +{ + int p; + __CPROVER_assume(p > 0 && p < 20); + f1(&p); + + return 0; +} diff --git a/regression/contracts/function-calls-04/test-enf.desc b/regression/contracts/function-calls-04/test-enf.desc new file mode 100644 index 00000000000..808cdab1356 --- /dev/null +++ b/regression/contracts/function-calls-04/test-enf.desc @@ -0,0 +1,20 @@ +KNOWNBUG +main.c +--enforce-all-contracts _ --unwind 20 --unwinding-assertions +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | assumed | asserted + f2_out | assumed | asserted + f2_in | assumed | asserted + +Recursion: +The base case for the recursive call to f2 provides the same behavior as the common case (given the pre-conditions). + +Known bug: +Enforce flag not handled correctly for function calls within functions. diff --git a/regression/contracts/function-calls-04/test-mix-1.desc b/regression/contracts/function-calls-04/test-mix-1.desc new file mode 100644 index 00000000000..3073097c3ee --- /dev/null +++ b/regression/contracts/function-calls-04/test-mix-1.desc @@ -0,0 +1,19 @@ +CORE +main.c +--enforce-contract f1 --replace-call-with-contract f2_out +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | assumed | asserted + f2_out | asserted | assumed + f2_in | n/a | n/a + +Note: the calls to f2_in does not occur because the call to f2_out is replaced by its contracts. + +Recursion: +The base case for the recursive call to f2 provides the same behavior as the common case (given the pre-conditions). diff --git a/regression/contracts/function-calls-04/test-mix-2.desc b/regression/contracts/function-calls-04/test-mix-2.desc new file mode 100644 index 00000000000..243d70b6f19 --- /dev/null +++ b/regression/contracts/function-calls-04/test-mix-2.desc @@ -0,0 +1,22 @@ +KNOWNBUG +main.c +--enforce-contract f1 --enforce-contract f2_out --replace-call-with-contract f2_in +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | assumed | asserted + f2_out | assumed | asserted + f2_in | asserted | assumed + +Recursion +(1) This test checks the mutualy recursive f2_out and f2-in functions by enforcing f2_out and replacing the internal f2_in call with its contract. +(2) This test does not require unwinding. +(3) The base case for the recursive call to f2 provides the same behavior as the common case (given the pre-conditions). + +Known bug: +Enforce flag not handled correctly for function calls within functions. diff --git a/regression/contracts/function-calls-04/test-rep.desc b/regression/contracts/function-calls-04/test-rep.desc new file mode 100644 index 00000000000..0551bd1a6b7 --- /dev/null +++ b/regression/contracts/function-calls-04/test-rep.desc @@ -0,0 +1,19 @@ +CORE +main.c +--replace-all-calls-with-contracts +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +-- +Verification: + function | pre-cond | post-cond + ---------|----------|---------- + f1 | asserted | assumed + f2_out | n/a | n/a + f2_in | n/a | n/a + +Note: the calls to f2_out and to f2_in do not occur because the call to f1 is replaced by its contracts. + +Recursion: +The base case for the recursive call to f2 provides the same behavior as the common case (given the pre-conditions). diff --git a/regression/contracts/invar_check_pointer_modifies-01/main.c b/regression/contracts/invar_check_pointer_modifies-01/main.c new file mode 100644 index 00000000000..1c6dc2df5a7 --- /dev/null +++ b/regression/contracts/invar_check_pointer_modifies-01/main.c @@ -0,0 +1,18 @@ +#include +#include + +void main() +{ + char *data = malloc(1); + *data = 42; + + unsigned i; + while(i > 0) + __CPROVER_loop_invariant(*data == 42) + { + *data = 42; + i--; + } + + assert(*data = 42); +} diff --git a/regression/contracts/invar_check_pointer_modifies-01/test.desc b/regression/contracts/invar_check_pointer_modifies-01/test.desc new file mode 100644 index 00000000000..818db63cf95 --- /dev/null +++ b/regression/contracts/invar_check_pointer_modifies-01/test.desc @@ -0,0 +1,14 @@ +CORE +main.c +--enforce-all-contracts --pointer-check +^EXIT=0$ +^SIGNAL=0$ +^\[main.1\] .* Check loop invariant before entry: SUCCESS$ +^\[main.2\] .* Check that loop invariant is preserved: SUCCESS$ +^\[main.assertion.1\] .* assertion \*data = 42: SUCCESS$ +^VERIFICATION SUCCESSFUL$ +-- +^\[main.pointer_dereference.*\] line .* dereference failure: pointer NULL in \*data: FAILURE +-- +This test checks that modifications to deref-ed pointers are correctly handled. +In such cases, pointers should not be havoc'ed, only the value should be. diff --git a/regression/contracts/invar_check_pointer_modifies-02/main.c b/regression/contracts/invar_check_pointer_modifies-02/main.c new file mode 100644 index 00000000000..1642d621ed9 --- /dev/null +++ b/regression/contracts/invar_check_pointer_modifies-02/main.c @@ -0,0 +1,21 @@ +#include +#include + +void main() +{ + char *copy, *data = malloc(1); + + copy = data; + *data = 42; + + unsigned i; + while(i > 0) + __CPROVER_loop_invariant(*data == 42) + { + *data = 42; + i--; + } + + assert(data == copy); + assert(*copy = 42); +} diff --git a/regression/contracts/invar_check_pointer_modifies-02/test.desc b/regression/contracts/invar_check_pointer_modifies-02/test.desc new file mode 100644 index 00000000000..8cf754528bc --- /dev/null +++ b/regression/contracts/invar_check_pointer_modifies-02/test.desc @@ -0,0 +1,14 @@ +CORE +main.c +--enforce-all-contracts --pointer-check +^EXIT=0$ +^SIGNAL=0$ +^\[main.1\] .* Check loop invariant before entry: SUCCESS$ +^\[main.2\] .* Check that loop invariant is preserved: SUCCESS$ +^\[main.assertion.1\] .* assertion data == copy: SUCCESS$ +^\[main.assertion.2\] .* assertion \*copy = 42: SUCCESS$ +^VERIFICATION SUCCESSFUL$ +-- +^\[main.pointer_dereference.*\] line .* dereference failure: pointer NULL in \*data: FAILURE +-- +This test checks that modifications to aliased pointers are correctly handled. diff --git a/regression/cpp-from-CVS/Address_of_Method1/main.cpp b/regression/cpp-from-CVS/Address_of_Method1/main.cpp deleted file mode 100644 index 8af3f1f740b..00000000000 --- a/regression/cpp-from-CVS/Address_of_Method1/main.cpp +++ /dev/null @@ -1,17 +0,0 @@ -struct x -{ - void f(); - - static int i; -}; - -void x::f() -{ -} - -int main() -{ - assert(&x::f!=0); - - assert(&x::i!=0); -} diff --git a/regression/cpp-from-CVS/Address_of_Method4/main.cpp b/regression/cpp-from-CVS/Address_of_Method4/main.cpp deleted file mode 100644 index b5eac2dbbbc..00000000000 --- a/regression/cpp-from-CVS/Address_of_Method4/main.cpp +++ /dev/null @@ -1,24 +0,0 @@ -struct x -{ - void f(); - int f(int); - -}; - -void x::f() -{ -} - -int x::f(int i) -{ - return i; -} - - - -int main() -{ - int (x::*pf) (int) = &x::f; -// x x1; -// assert((x1.*pf)(0) == 0); -} diff --git a/regression/cpp-from-CVS/Anonymous_members1/main.cpp b/regression/cpp-from-CVS/Anonymous_members1/main.cpp deleted file mode 100644 index 6a0998beca5..00000000000 --- a/regression/cpp-from-CVS/Anonymous_members1/main.cpp +++ /dev/null @@ -1,26 +0,0 @@ -typedef unsigned DWORD; -typedef signed LONG; -typedef long long LONGLONG; - -typedef union _LARGE_INTEGER { - struct { - DWORD LowPart; - LONG HighPart; - }; - struct { - DWORD LowPart; - LONG HighPart; - } u; - - LONGLONG QuadPart; -} LARGE_INTEGER; - -int main() -{ - LARGE_INTEGER l; - - l.QuadPart=1; - l.LowPart=2; - l.u.LowPart=3; - assert(l.LowPart==3); -} diff --git a/regression/cpp-from-CVS/Array1/main.cpp b/regression/cpp-from-CVS/Array1/main.cpp deleted file mode 100644 index bf43cb7c52f..00000000000 --- a/regression/cpp-from-CVS/Array1/main.cpp +++ /dev/null @@ -1,10 +0,0 @@ -int y[5][4][3][2]; - -int main() -{ - for(int i=0; i<5; i++) - for(int j=0; j<4; j++) - for(int k=0; k<3; k++) - for(int l=0; l<2; l++) - y[i][j][k][l]=2; -} diff --git a/regression/cpp-from-CVS/Array2/main.cpp b/regression/cpp-from-CVS/Array2/main.cpp deleted file mode 100644 index a9910788ebb..00000000000 --- a/regression/cpp-from-CVS/Array2/main.cpp +++ /dev/null @@ -1,10 +0,0 @@ -int y[2][3][4][5]; - -int main() -{ - for(int i=0; i<5; i++) - for(int j=0; j<4; j++) - for(int k=0; k<3; k++) - for(int l=0; l<2; l++) - y[i][j][k][l]=2; // out-of-bounds -} diff --git a/regression/cpp-from-CVS/Array3/main.cpp b/regression/cpp-from-CVS/Array3/main.cpp deleted file mode 100644 index fa56e6fa264..00000000000 --- a/regression/cpp-from-CVS/Array3/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ -struct C -{ - static const char * array[1]; -}; - -const char * C::array[1] = { "HELLO" }; - -int main(int argc, const char* argv[]) -{ - assert(*C::array[0] == 'H'); -} diff --git a/regression/cpp-from-CVS/Array4/main.cpp b/regression/cpp-from-CVS/Array4/main.cpp deleted file mode 100644 index e5619c4e398..00000000000 --- a/regression/cpp-from-CVS/Array4/main.cpp +++ /dev/null @@ -1,8 +0,0 @@ -char my_string[]="abc"; - -void elsewhere(); - -int main() -{ - elsewhere(); -} diff --git a/regression/cpp-from-CVS/Assignment1/main.cpp b/regression/cpp-from-CVS/Assignment1/main.cpp deleted file mode 100644 index 96c88255e0c..00000000000 --- a/regression/cpp-from-CVS/Assignment1/main.cpp +++ /dev/null @@ -1,37 +0,0 @@ -struct A { int i;}; - -struct B -{ - int i; - B& operator = (const B& b) - { - i = b.i; - return *this; - } -}; - -A funcA() -{ - A a; - a.i = 10; - return a; -} - - -B funcB() -{ - B b; - b.i = 10; - return b; -} - -int main() -{ - A a; - a.i = 20; - assert((funcA() = a).i == 20); // legal - - B b; - b.i = 20; - assert((funcB() = b).i == 20); // legal -} diff --git a/regression/cpp-from-CVS/Class_Members1/main.cpp b/regression/cpp-from-CVS/Class_Members1/main.cpp deleted file mode 100644 index 5d6a2934abc..00000000000 --- a/regression/cpp-from-CVS/Class_Members1/main.cpp +++ /dev/null @@ -1,28 +0,0 @@ -class t -{ -public: - int i; - void f(); - - void g(double xxx=3.2); -}; - -void t::f() -{ - i=1; -} - -void t::g(double d) -{ - i=(int)d; -} - -int main() -{ - t instance; - instance.f(); - assert(instance.i==1); - - instance.g(2.1); - assert(instance.i==2); -} diff --git a/regression/cpp-from-CVS/Comma_Operator1/main.cpp b/regression/cpp-from-CVS/Comma_Operator1/main.cpp deleted file mode 100644 index 1a768ab5ae6..00000000000 --- a/regression/cpp-from-CVS/Comma_Operator1/main.cpp +++ /dev/null @@ -1,8 +0,0 @@ -int main() -{ - int s=0; - int t=0; - t=(s=3, s+2); - assert(s==3); - assert(t==5); -} diff --git a/regression/cpp-from-CVS/ConditionalExpression1/main.cpp b/regression/cpp-from-CVS/ConditionalExpression1/main.cpp deleted file mode 100644 index 2cb27b71ebc..00000000000 --- a/regression/cpp-from-CVS/ConditionalExpression1/main.cpp +++ /dev/null @@ -1,12 +0,0 @@ -int main() -{ - bool b; - int a = 0; - int c = 0; - - b ? a += 1 : c +=1; - - assert(a == 1 || a == 0); - assert(c == 1 || c == 0); - assert( a != c); -} diff --git a/regression/cpp-from-CVS/ConditionalExpression2/main.cpp b/regression/cpp-from-CVS/ConditionalExpression2/main.cpp deleted file mode 100644 index 46de51d6aff..00000000000 --- a/regression/cpp-from-CVS/ConditionalExpression2/main.cpp +++ /dev/null @@ -1,9 +0,0 @@ -char a[1]; -char b[2]; - -int main() -{ - char* c = true ? a : b; - assert(*c == a[0]); - return 0; -} diff --git a/regression/cpp-from-CVS/Constant5/main.cpp b/regression/cpp-from-CVS/Constant5/main.cpp deleted file mode 100644 index b481d0422a6..00000000000 --- a/regression/cpp-from-CVS/Constant5/main.cpp +++ /dev/null @@ -1,9 +0,0 @@ -const int ASD1=1; - -int array[ASD1]; - -int main() -{ - // this sound fail! - (int &)ASD1=2; -} diff --git a/regression/cpp-from-CVS/Constructor1/main.cpp b/regression/cpp-from-CVS/Constructor1/main.cpp deleted file mode 100644 index 134b4176717..00000000000 --- a/regression/cpp-from-CVS/Constructor1/main.cpp +++ /dev/null @@ -1,43 +0,0 @@ -class t1 -{ -public: - int i; - - t1() { i=1; } -}; - -class t2 -{ -public: - int i; - - t2():i(2) { } -}; - -class t3 -{ -public: - int i; - - t3(); -}; - -t3::t3():i(3) -{ -} - -int main() -{ - t1 instance1; - assert(instance1.i==1); - - t2 instance2; - assert(instance2.i==2); - - t2 *p=new t2; - assert(p->i==2); - delete p; - - t3 instance3; - assert(instance3.i==3); -} diff --git a/regression/cpp-from-CVS/Constructor10/main.cpp b/regression/cpp-from-CVS/Constructor10/main.cpp deleted file mode 100644 index efd4869d97e..00000000000 --- a/regression/cpp-from-CVS/Constructor10/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ -class A -{ - public: - int a; - A(int a):a(a){} -}; - - -A f() -{ - return A(0); -} - -int main() {} diff --git a/regression/cpp-from-CVS/Constructor12/main.cpp b/regression/cpp-from-CVS/Constructor12/main.cpp deleted file mode 100644 index 3158f9a553c..00000000000 --- a/regression/cpp-from-CVS/Constructor12/main.cpp +++ /dev/null @@ -1,22 +0,0 @@ -struct A -{ - int i; - A():i(10) {} - private: - A(const A& a); // disabled -}; - - -class B: A { - public: - B(){}; - int get_i() {return i;} - private: - B(B& b); // disabled -}; - -int main() -{ - B b; - assert(b.get_i() == 10); -} diff --git a/regression/cpp-from-CVS/Constructor13/main.cpp b/regression/cpp-from-CVS/Constructor13/main.cpp deleted file mode 100644 index cabf296c968..00000000000 --- a/regression/cpp-from-CVS/Constructor13/main.cpp +++ /dev/null @@ -1,35 +0,0 @@ -int g; -class A { - public: - A(int i){g=i;}; - private: - A(); -}; - -class B: A { - public: - typedef A base_type; - typedef B this_type; - B():base_type(10) {} - B(const this_type& b): A(20) {g++;} -}; - -class C: B -{ - typedef B base_type; - typedef C this_type; - public: - C(): base_type() {} - C(const base_type& b): base_type(b){g++;} -}; - - -C c; - -int main() -{ - assert(g==10); - B b; - C c2 = b; - assert(g==22); -} diff --git a/regression/cpp-from-CVS/Constructor14/main.cpp b/regression/cpp-from-CVS/Constructor14/main.cpp deleted file mode 100644 index 15c4afaef68..00000000000 --- a/regression/cpp-from-CVS/Constructor14/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -struct A -{ - A(int i):i(i) {} - int i; -}; - -A a(1); - - -A b = 1; - -int main() -{ - A c(1); - A d=1; - assert(a.i == 1); - assert(b.i == 1); - assert(c.i == 1); - assert(c.i == 1); -} diff --git a/regression/cpp-from-CVS/Constructor15/main.cpp b/regression/cpp-from-CVS/Constructor15/main.cpp deleted file mode 100644 index c6e7dc4f3f6..00000000000 --- a/regression/cpp-from-CVS/Constructor15/main.cpp +++ /dev/null @@ -1,18 +0,0 @@ -class A -{ - public: - A(){}; - private: - A(const A&); // disabled - A& operator=(const A&); // disabled -}; - -class B: public A -{ -}; - - -int main() -{ - B b; // ok -} diff --git a/regression/cpp-from-CVS/Constructor16/main.cpp b/regression/cpp-from-CVS/Constructor16/main.cpp deleted file mode 100644 index 75e996d8be2..00000000000 --- a/regression/cpp-from-CVS/Constructor16/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -class A -{ -public: - A(){}; - -private: - A(const A&); // disabled - A& operator=(const A&); // disabled -}; - -class B: public A -{ -}; - - -int main() -{ - B b1, b2; - b1 = b2; // not ok -} diff --git a/regression/cpp-from-CVS/Constructor17/main.cpp b/regression/cpp-from-CVS/Constructor17/main.cpp deleted file mode 100644 index abcec93d2c1..00000000000 --- a/regression/cpp-from-CVS/Constructor17/main.cpp +++ /dev/null @@ -1,24 +0,0 @@ -class C -{ - public: - C(int& v):v(v) {} - int v; -}; - -struct D -{ - int r; -}; - -int main(int argc, char* argv[]) -{ - int i=10; - int& ref = i; - C* pc = new C((char&)ref); - assert(pc->v == 10); - D d; - d.r = 10; - D& ref_d = d; - D* pd = new D(ref_d); - assert(pd->r == 10); -} diff --git a/regression/cpp-from-CVS/Constructor2/main.cpp b/regression/cpp-from-CVS/Constructor2/main.cpp deleted file mode 100644 index 0dd3b7cdaf7..00000000000 --- a/regression/cpp-from-CVS/Constructor2/main.cpp +++ /dev/null @@ -1,40 +0,0 @@ -class t1 -{ -public: - int i; - - t1(); - t1(int z); -}; - -t1::t1():i(1) -{ -} - -t1::t1(int z) -{ - i=z; -} - -class t2 -{ -public: - int i; - - t2(); - t2(int z); -}; - -t2::t2():i(1) -{ -} - -t2::t2(int z) -{ -} - -int main() -{ - t1 instance1(5); - assert(instance1.i==5); -} diff --git a/regression/cpp-from-CVS/Constructor3/main.cpp b/regression/cpp-from-CVS/Constructor3/main.cpp deleted file mode 100644 index 68403e21ef9..00000000000 --- a/regression/cpp-from-CVS/Constructor3/main.cpp +++ /dev/null @@ -1,16 +0,0 @@ -class x -{ -public: - x(); - x(int z); - int i; -}; - -x::x():i(1) { } -x::x(int z):i(z) { } - -int main() -{ - x a(5); - assert(a.i==5); -} diff --git a/regression/cpp-from-CVS/Constructor4/main.cpp b/regression/cpp-from-CVS/Constructor4/main.cpp deleted file mode 100644 index d099a90572d..00000000000 --- a/regression/cpp-from-CVS/Constructor4/main.cpp +++ /dev/null @@ -1,16 +0,0 @@ -struct x -{ - int *q; - - x(); -}; - -x::x():q(0) -{ -} - -int main() -{ - x a; - assert(a.q==0); -} diff --git a/regression/cpp-from-CVS/Constructor5/main.cpp b/regression/cpp-from-CVS/Constructor5/main.cpp deleted file mode 100644 index 9d90aed92a4..00000000000 --- a/regression/cpp-from-CVS/Constructor5/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -class x -{ -private: - int i; - -public: - x(); - - int get_i() { return i; } -}; - -x::x():i(1) -{ -} - -int main() -{ - x a; - assert(a.get_i()==1); -} diff --git a/regression/cpp-from-CVS/Constructor5/test.desc b/regression/cpp-from-CVS/Constructor5/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Constructor5/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Constructor6/main.cpp b/regression/cpp-from-CVS/Constructor6/main.cpp deleted file mode 100644 index a5f9a26f7a8..00000000000 --- a/regression/cpp-from-CVS/Constructor6/main.cpp +++ /dev/null @@ -1,23 +0,0 @@ -int counter=1; - -struct T -{ - int z; - - T(); -}; - -T::T() -{ - z=counter; - counter++; -} - -T a, b; - -int main() -{ - assert(counter==3); - assert(a.z==1); - assert(b.z==2); -} diff --git a/regression/cpp-from-CVS/Constructor6/test.desc b/regression/cpp-from-CVS/Constructor6/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Constructor6/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Constructor9/main.cpp b/regression/cpp-from-CVS/Constructor9/main.cpp deleted file mode 100644 index 0bf1f800562..00000000000 --- a/regression/cpp-from-CVS/Constructor9/main.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// Default Initialization of arrays -class B -{ -public: - int i; - - B():i(1) - { - } -}; - -class A -{ -public: - B b_array[2]; - A() {} -}; - -B static_b_array[2]; - -int main() -{ - assert(static_b_array[0].i==1); - assert(static_b_array[1].i==1); - - A a; - - assert(a.b_array[0].i==1); - assert(a.b_array[1].i==1); - - B b_array[2]; - - assert(b_array[0].i==1); - assert(b_array[1].i==1); -} diff --git a/regression/cpp-from-CVS/Constructor9/test.desc b/regression/cpp-from-CVS/Constructor9/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Constructor9/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Conversion1/main.cpp b/regression/cpp-from-CVS/Conversion1/main.cpp deleted file mode 100644 index 586182a19c6..00000000000 --- a/regression/cpp-from-CVS/Conversion1/main.cpp +++ /dev/null @@ -1,24 +0,0 @@ -class T -{ -public: - T():x(0) - { - } - - T(int i, int j):x(i) - { - } - - int x; -}; - -int main() -{ - // alternate forms of conversion - assert(unsigned(-1)==(unsigned)-1); - - assert(bool(10)); - - T t=T(2, 3); - assert(t.x==2); -} diff --git a/regression/cpp-from-CVS/Conversion10/main.cpp b/regression/cpp-from-CVS/Conversion10/main.cpp deleted file mode 100644 index 90acac074fc..00000000000 --- a/regression/cpp-from-CVS/Conversion10/main.cpp +++ /dev/null @@ -1,13 +0,0 @@ -struct A {}; - -struct B { - explicit B(A&){} -}; - -void test(const B& b) {} - -int main() -{ - A a; - test(a); // conversion error -} diff --git a/regression/cpp-from-CVS/Conversion11/main.cpp b/regression/cpp-from-CVS/Conversion11/main.cpp deleted file mode 100644 index 09a4d27798d..00000000000 --- a/regression/cpp-from-CVS/Conversion11/main.cpp +++ /dev/null @@ -1 +0,0 @@ -char* func() {return (void*)0; } diff --git a/regression/cpp-from-CVS/Conversion3/main.cpp b/regression/cpp-from-CVS/Conversion3/main.cpp deleted file mode 100644 index 48274d054b7..00000000000 --- a/regression/cpp-from-CVS/Conversion3/main.cpp +++ /dev/null @@ -1,6 +0,0 @@ -int main() -{ - char c = 'c'; - int& i = c; // ill-formed - i++; -} diff --git a/regression/cpp-from-CVS/Conversion5/main.cpp b/regression/cpp-from-CVS/Conversion5/main.cpp deleted file mode 100644 index bac3701b6c7..00000000000 --- a/regression/cpp-from-CVS/Conversion5/main.cpp +++ /dev/null @@ -1,7 +0,0 @@ -int main() -{ - unsigned i = 1; - unsigned j; - j = i + 1; - assert(j==2); -} diff --git a/regression/cpp-from-CVS/Conversion5/test.desc b/regression/cpp-from-CVS/Conversion5/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Conversion5/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Conversion6/main.cpp b/regression/cpp-from-CVS/Conversion6/main.cpp deleted file mode 100644 index 53d3b28d240..00000000000 --- a/regression/cpp-from-CVS/Conversion6/main.cpp +++ /dev/null @@ -1,25 +0,0 @@ -struct A -{ - int i; -}; - -struct B: public A { - int j; -}; - -int func(A a) -{ - return a.i; -} - -int main() -{ - B b; - b.i = 1; - - assert((* ((A*)&b)).i == 1); // This works fine. - - int bi = func( * ((A*)&b)); // Satabs Ok. - // cbmc error - assert(bi == 1); -} diff --git a/regression/cpp-from-CVS/Conversion6/test.desc b/regression/cpp-from-CVS/Conversion6/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Conversion6/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Conversion7/main.cpp b/regression/cpp-from-CVS/Conversion7/main.cpp deleted file mode 100644 index f16cdcbab03..00000000000 --- a/regression/cpp-from-CVS/Conversion7/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -struct A{ - int i; -}; - -struct B: public A{ -}; - -int main() -{ - B b; - b.i=4; - - A(b).i++; // Not a lvalue? - assert(b.i==4); -} diff --git a/regression/cpp-from-CVS/Conversion8/main.cpp b/regression/cpp-from-CVS/Conversion8/main.cpp deleted file mode 100644 index 2ae6dca55d8..00000000000 --- a/regression/cpp-from-CVS/Conversion8/main.cpp +++ /dev/null @@ -1,8 +0,0 @@ -int main() { - const char c[1] = {'c'}; - char* pc; - const char** pcc = &pc; // 1: not allowed - *pcc = &c; - *pc = 'C'; // 2: modifies a const object - assert(c[0]=='c'); -} diff --git a/regression/cpp-from-CVS/Conversion9/main.cpp b/regression/cpp-from-CVS/Conversion9/main.cpp deleted file mode 100644 index f59a75fbe89..00000000000 --- a/regression/cpp-from-CVS/Conversion9/main.cpp +++ /dev/null @@ -1,10 +0,0 @@ -struct A -{ -}; - -struct B: A {}; - -int main() -{ - A a = B(); -} diff --git a/regression/cpp-from-CVS/Conversion_Operator1/main.cpp b/regression/cpp-from-CVS/Conversion_Operator1/main.cpp deleted file mode 100644 index 8515bf5de2e..00000000000 --- a/regression/cpp-from-CVS/Conversion_Operator1/main.cpp +++ /dev/null @@ -1,33 +0,0 @@ -struct Char { - char c; - Char(char c):c(c){} -}; - -struct Int { - int i; - operator int& (); - Int(int i):i(i){} -}; - -Int::operator int&() {return i;} - -int main() -{ - Int I1(1); - int i1 = int(I1); - assert(i1==1); - - - Int I2(2); - int i2 = (int&)I2; - assert(i2==2); - - - Int I3(3); - int i3 =0; - i3 = I3; - assert(i3==3); - - Char C3(I3); - assert(C3.c==3); -} diff --git a/regression/cpp-from-CVS/Conversion_Operator2/main.cpp b/regression/cpp-from-CVS/Conversion_Operator2/main.cpp deleted file mode 100644 index 8dde5fdee8d..00000000000 --- a/regression/cpp-from-CVS/Conversion_Operator2/main.cpp +++ /dev/null @@ -1,22 +0,0 @@ -struct B -{ - int i; -}; - - -struct A { - B b; - A(int i) {b.i = i;} - operator B& () - { - return b; - } -}; - -int get_i(const B& b) {return b.i;} - -int main() -{ - A a(10); - assert(get_i(a)==10); -} diff --git a/regression/cpp-from-CVS/Conversion_Operator2/test.desc b/regression/cpp-from-CVS/Conversion_Operator2/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Conversion_Operator2/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Conversion_Operator3/main.cpp b/regression/cpp-from-CVS/Conversion_Operator3/main.cpp deleted file mode 100644 index 08200a3b963..00000000000 --- a/regression/cpp-from-CVS/Conversion_Operator3/main.cpp +++ /dev/null @@ -1,22 +0,0 @@ -struct A { - int i; -}; - -struct B { - int i; - operator A () - { - A tmp; - tmp.i = i++; - return tmp; - } -}; - -int main() -{ - B b; - b.i = 1; - A a = b; - assert(a.i==1); - assert(b.i==2); -} diff --git a/regression/cpp-from-CVS/Conversion_Operator3/test.desc b/regression/cpp-from-CVS/Conversion_Operator3/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Conversion_Operator3/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Conversion_Operator4/main.cpp b/regression/cpp-from-CVS/Conversion_Operator4/main.cpp deleted file mode 100644 index cc76959191c..00000000000 --- a/regression/cpp-from-CVS/Conversion_Operator4/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ -struct A -{ - static const int* const i = 0; - operator const int* const ()const - { - return i; - } -}; - -int main() -{ - A a; - assert((const int* const)a == A::i); -} diff --git a/regression/cpp-from-CVS/Conversion_Operator4/test.desc b/regression/cpp-from-CVS/Conversion_Operator4/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Conversion_Operator4/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Conversion_Operator5/main.cpp b/regression/cpp-from-CVS/Conversion_Operator5/main.cpp deleted file mode 100644 index ffec9ff65bd..00000000000 --- a/regression/cpp-from-CVS/Conversion_Operator5/main.cpp +++ /dev/null @@ -1,23 +0,0 @@ -struct B { - int i; - bool operator == (int b) - { - return i == b; - } -}; - -struct A { - int i; - operator B() const - { - B b; - b.i = i; - return b; - } -}; - -int main() { - A a; - a.i = 10; - assert( a.operator B() == 10 ); -} diff --git a/regression/cpp-from-CVS/Copy_Constructor1/main.cpp b/regression/cpp-from-CVS/Copy_Constructor1/main.cpp deleted file mode 100644 index fba333831b8..00000000000 --- a/regression/cpp-from-CVS/Copy_Constructor1/main.cpp +++ /dev/null @@ -1,23 +0,0 @@ -class A -{ - public: - A():i(0) {} - virtual int inc() {return ++i;} - int i; -}; - -class B: public A -{ - public: - int inc(){return i+=2;} -}; - -int main() -{ - B b; - int c = b.inc(); - assert(c==2); - A a=b; - c = a.inc(); - assert(c==3); -} diff --git a/regression/cpp-from-CVS/Copy_Constructor2/main.cpp b/regression/cpp-from-CVS/Copy_Constructor2/main.cpp deleted file mode 100644 index 95ad03af84c..00000000000 --- a/regression/cpp-from-CVS/Copy_Constructor2/main.cpp +++ /dev/null @@ -1,29 +0,0 @@ -class A -{ -public: - A():i(0) { } - virtual int inc() { return ++i; } - int i; -}; - -class B: public A -{ -public: - int inc() { return i+=2; } -}; - -int inc(A a) -{ - return a.inc(); -} - -int main() -{ - B b; - - int c = b.inc(); - assert(c==2); - - c = inc((A)b); - assert(c==3); -} diff --git a/regression/cpp-from-CVS/Copy_Constructor3/main.cpp b/regression/cpp-from-CVS/Copy_Constructor3/main.cpp deleted file mode 100644 index 8c601e54935..00000000000 --- a/regression/cpp-from-CVS/Copy_Constructor3/main.cpp +++ /dev/null @@ -1,27 +0,0 @@ -class A -{ - public: - int ar[2]; - A(){ar[0]=0; ar[1]=1;} -}; - -class B -{ - public: - A as[2]; -}; - -int main() -{ - B b1; - b1.as[0].ar[0] += 1; - b1.as[0].ar[1] += 1; - b1.as[1].ar[0] += 2; - b1.as[1].ar[1] += 2; - - B b2(b1); - assert(b2.as[0].ar[0]== 1); - assert(b2.as[0].ar[1] == 2); - assert(b2.as[1].ar[0] == 2); - assert(b2.as[1].ar[1] == 3); -} diff --git a/regression/cpp-from-CVS/Copy_Constructor5/main.cpp b/regression/cpp-from-CVS/Copy_Constructor5/main.cpp deleted file mode 100644 index f6e83898767..00000000000 --- a/regression/cpp-from-CVS/Copy_Constructor5/main.cpp +++ /dev/null @@ -1,22 +0,0 @@ -struct A -{ - int i; -}; - -struct B: public A -{ - int j; - B():j(0) { } -}; - -int main() -{ - B b1; - b1.i=10; - b1.j=20; - - B b2(b1); - - assert(b2.i == 10); - assert(b2.j == 20); -} diff --git a/regression/cpp-from-CVS/Copy_Operator1/main.cpp b/regression/cpp-from-CVS/Copy_Operator1/main.cpp deleted file mode 100644 index 134f610fc5d..00000000000 --- a/regression/cpp-from-CVS/Copy_Operator1/main.cpp +++ /dev/null @@ -1,27 +0,0 @@ -class A -{ - public: - int ar[2]; - A& operator=(const A& ref) - { - ar[0] = ref.ar[1]; - ar[1] = ref.ar[0]; - return *this; - } - -}; - -int main() -{ - A a1; - a1.ar[0]= 1; - a1.ar[1]= 2; - - A a2; - a2.ar[0]= 3; - a2.ar[1]= 4; - - a2 = a1; - assert(a2.ar[0]==a1.ar[1]); - assert(a2.ar[1]==a1.ar[0]); -} diff --git a/regression/cpp-from-CVS/Copy_Operator2/main.cpp b/regression/cpp-from-CVS/Copy_Operator2/main.cpp deleted file mode 100644 index 7751933bd7b..00000000000 --- a/regression/cpp-from-CVS/Copy_Operator2/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ -class A -{ - const int a; - A():a(0){} -}; - -int main() -{ - A a, b; - a=b; -} diff --git a/regression/cpp-from-CVS/Default_Arguments1/main.cpp b/regression/cpp-from-CVS/Default_Arguments1/main.cpp deleted file mode 100644 index 6c9ae18e7fe..00000000000 --- a/regression/cpp-from-CVS/Default_Arguments1/main.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// #include - -int f(int d=1) -{ - return d; -} - -int g(int x, int d=1, int q=2) -{ - return d; -} - -int global; - -int h(int &r=global) -{ - return r; -} - -void doit() -{ - assert(f()==1); - assert(f(2)==2); - assert(g(0)==1); - assert(g(1, 2)==2); - - global=10; - assert(h()==10); -} - -int main() -{ - doit(); -} diff --git a/regression/cpp-from-CVS/Default_Arguments1/test.desc b/regression/cpp-from-CVS/Default_Arguments1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Default_Arguments1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Default_Arguments2/main.cpp b/regression/cpp-from-CVS/Default_Arguments2/main.cpp deleted file mode 100644 index e64102d3251..00000000000 --- a/regression/cpp-from-CVS/Default_Arguments2/main.cpp +++ /dev/null @@ -1,7 +0,0 @@ -int func(int i = 0) {return i;} - -int main() -{ - int (*pfunc)(int) = func; - assert((*pfunc)(10) == 10); -} diff --git a/regression/cpp-from-CVS/Default_Arguments2/test.desc b/regression/cpp-from-CVS/Default_Arguments2/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Default_Arguments2/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Destructor1/main.cpp b/regression/cpp-from-CVS/Destructor1/main.cpp deleted file mode 100644 index 205da5fe5e0..00000000000 --- a/regression/cpp-from-CVS/Destructor1/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -int g; - -class t1 -{ -public: - t1() { g=1; } - ~t1() { g=2; } -}; - -int main() -{ - assert(g==0); - - { - t1 instance1; - assert(g==1); - } - - assert(g==2); -} diff --git a/regression/cpp-from-CVS/Destructor2/main.cpp b/regression/cpp-from-CVS/Destructor2/main.cpp deleted file mode 100644 index 8a09834a255..00000000000 --- a/regression/cpp-from-CVS/Destructor2/main.cpp +++ /dev/null @@ -1,25 +0,0 @@ -int g; - -class t1 -{ -public: - t1() { g=1; } - ~t1() { g=2; } -}; - -int main() -{ - assert(g==0); - - while(true) - { - { - t1 instance1; - assert(g==1); - break; // leave the loop - } - - } - - assert(g==2); -} diff --git a/regression/cpp-from-CVS/Destructor3/main.cpp b/regression/cpp-from-CVS/Destructor3/main.cpp deleted file mode 100644 index 0401dce629c..00000000000 --- a/regression/cpp-from-CVS/Destructor3/main.cpp +++ /dev/null @@ -1,13 +0,0 @@ -class A -{ - int i; - -public: - A():i(1) { } - ~A() { i=0; } -}; - -int main() -{ - A a; -} diff --git a/regression/cpp-from-CVS/Destructor3/test.desc b/regression/cpp-from-CVS/Destructor3/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Destructor3/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Destructor4/main.cpp b/regression/cpp-from-CVS/Destructor4/main.cpp deleted file mode 100644 index b0f2876e47c..00000000000 --- a/regression/cpp-from-CVS/Destructor4/main.cpp +++ /dev/null @@ -1,17 +0,0 @@ -class A -{ - public: - int i; - A():i(1) {} - ~A(); -}; - -A::~A() -{ - i = -1; -} - -int main() -{ - A a; -} diff --git a/regression/cpp-from-CVS/Destructor4/test.desc b/regression/cpp-from-CVS/Destructor4/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Destructor4/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Destructor5/main.cpp b/regression/cpp-from-CVS/Destructor5/main.cpp deleted file mode 100644 index 8a3d9bb4ff4..00000000000 --- a/regression/cpp-from-CVS/Destructor5/main.cpp +++ /dev/null @@ -1,16 +0,0 @@ -class X -{ -public: - ~X() - { - } -}; - -int main() -{ - const X *p=new X; - - // this is to work even though p is const, and the destructor - // isn't. - delete p; -} diff --git a/regression/cpp-from-CVS/Destructor5/test.desc b/regression/cpp-from-CVS/Destructor5/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Destructor5/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Destructor_with_PtrMember/main.cpp b/regression/cpp-from-CVS/Destructor_with_PtrMember/main.cpp deleted file mode 100644 index 87aeca536dc..00000000000 --- a/regression/cpp-from-CVS/Destructor_with_PtrMember/main.cpp +++ /dev/null @@ -1,28 +0,0 @@ -int global; - -class test_class { -public: - ~test_class() { global=1; } -}; - -int main() { - test_class c, *p; - - p=&c; - - p -> ~test_class(); - - assert(global==1); - - // The notation for explicit calls to destructors can be used regardless - // of whether the type defines a destructor. This allows you to make such - // explicit calls without knowing if a destructor is defined for the type. - // An explicit call to a destructor where none is defined has no effect. - - typedef char TT; - - TT *q; - q->~TT(); - - return 0; -} diff --git a/regression/cpp-from-CVS/Destructor_with_PtrMember/test.desc b/regression/cpp-from-CVS/Destructor_with_PtrMember/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Destructor_with_PtrMember/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Exception1/main.cpp b/regression/cpp-from-CVS/Exception1/main.cpp deleted file mode 100644 index dfaf154ab20..00000000000 --- a/regression/cpp-from-CVS/Exception1/main.cpp +++ /dev/null @@ -1,73 +0,0 @@ -#include - -class whatnot -{ -public: - whatnot(int _i):i(_i) { } - int i; -}; - -int main() -{ - // example 1 - - try - { - throw (int)0; - assert(0); - } - - catch(int i) - { - // yes - } - catch(char ch) - { - assert(0); - } - catch(whatnot) - { - assert(0); - } - - // example 2 - - try - { - throw (char)0; - assert(0); - } - - catch(int i) - { - assert(0); - } - catch(char ch) - { - } - catch(whatnot) - { - assert(0); - } - - // example 3 - - try - { - throw whatnot(1); - assert(0); - } - - catch(int i) - { - assert(0); - } - catch(char ch) - { - assert(0); - } - catch(whatnot w) - { - assert(w.i==1); - } -} diff --git a/regression/cpp-from-CVS/Float1/main.cpp b/regression/cpp-from-CVS/Float1/main.cpp deleted file mode 100644 index 1feb586ec55..00000000000 --- a/regression/cpp-from-CVS/Float1/main.cpp +++ /dev/null @@ -1,10 +0,0 @@ -int main(int argc, char* argv[]) -{ - float x = 0.1; - float y = 1.01; - assert(x+y >= 1.1); - - double s = x; - double t = 1; - assert(x+y >= 1.1); -} diff --git a/regression/cpp-from-CVS/Float1/test.desc b/regression/cpp-from-CVS/Float1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Float1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Friend1/main.cpp b/regression/cpp-from-CVS/Friend1/main.cpp deleted file mode 100644 index b32e8c26ab1..00000000000 --- a/regression/cpp-from-CVS/Friend1/main.cpp +++ /dev/null @@ -1,22 +0,0 @@ -class C -{ -public: - C(int _base):base(_base) { } - - typedef int T; - - friend int f() - { - T x=1; - return x; - } - - int base; -}; - -int main() -{ - C c(1); - - assert(f()==1); -} diff --git a/regression/cpp-from-CVS/Friend1/test.desc b/regression/cpp-from-CVS/Friend1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Friend1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Friend3/main.cpp b/regression/cpp-from-CVS/Friend3/main.cpp deleted file mode 100644 index 71a47b40516..00000000000 --- a/regression/cpp-from-CVS/Friend3/main.cpp +++ /dev/null @@ -1,17 +0,0 @@ -class A { - friend void inc(A&); - friend int get(const A& a); - int i; -}; - - -void inc(A& a) {a.i++;} -int get(const A& a) {return a.i;} - -A a; - -int main() -{ - inc(a); - assert(get(a)==1); -} diff --git a/regression/cpp-from-CVS/Friend3/test.desc b/regression/cpp-from-CVS/Friend3/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Friend3/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Friend4/main.cpp b/regression/cpp-from-CVS/Friend4/main.cpp deleted file mode 100644 index f9fc322cec6..00000000000 --- a/regression/cpp-from-CVS/Friend4/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -class A { - int i; -}; - - -void inc(A& a) {a.i++;} -int get(const A& a) {return a.i;} - -A a; - -int main() -{ - inc(a); - assert(get(a)==1); -} diff --git a/regression/cpp-from-CVS/Friend5/main.cpp b/regression/cpp-from-CVS/Friend5/main.cpp deleted file mode 100644 index 4ab363bccbe..00000000000 --- a/regression/cpp-from-CVS/Friend5/main.cpp +++ /dev/null @@ -1,26 +0,0 @@ -class A { - int i; - friend class B; -}; - -class B -{ - public: - static int get(const A& a) - { - return a.i; - } - - static void set(A& a, int i) - { - a.i = i; - } -}; - -int main() -{ - - A a; - B::set(a, 10); - assert(B::get(a)==10); -} diff --git a/regression/cpp-from-CVS/Friend5/test.desc b/regression/cpp-from-CVS/Friend5/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Friend5/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Friend6/main.cpp b/regression/cpp-from-CVS/Friend6/main.cpp deleted file mode 100644 index 5690728f38f..00000000000 --- a/regression/cpp-from-CVS/Friend6/main.cpp +++ /dev/null @@ -1,23 +0,0 @@ -class B; - -template -struct A { - int get_i(B& b); -}; - -class B { - int i; - public: - B():i(10) {} - friend class A; -}; - -template -int A::get_i(B& b) {return b.i;} - -int main() -{ - B b; - A a; - assert(a.get_i(b)==10); -} diff --git a/regression/cpp-from-CVS/Function_Arguments1/main.cpp b/regression/cpp-from-CVS/Function_Arguments1/main.cpp deleted file mode 100644 index 7288a563364..00000000000 --- a/regression/cpp-from-CVS/Function_Arguments1/main.cpp +++ /dev/null @@ -1,8 +0,0 @@ -inline void *memchr(void* __p, int __c, int __n) -{ - __p++; -} - -int main() -{ -} diff --git a/regression/cpp-from-CVS/Function_Arguments1/test.desc b/regression/cpp-from-CVS/Function_Arguments1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Function_Arguments1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Function_Arguments2/main.cpp b/regression/cpp-from-CVS/Function_Arguments2/main.cpp deleted file mode 100644 index 1887762b3e0..00000000000 --- a/regression/cpp-from-CVS/Function_Arguments2/main.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// test default arguments - -int f(int a, int b=2, int c=3) -{ - return c; -} - -class X{ -public: - int g(int a, int b, int c=3); -}; - -int X::g(int a, int b, int c) -{ - return c; -} - -int main() -{ - assert(f(1, 10, 100)==100); - assert(f(1, 10)==3); - assert(f(1)==3); - - X x; - assert(x.g(1, 2)==3); -} diff --git a/regression/cpp-from-CVS/Function_Arguments2/test.desc b/regression/cpp-from-CVS/Function_Arguments2/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Function_Arguments2/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Function_Arguments3/main.cpp b/regression/cpp-from-CVS/Function_Arguments3/main.cpp deleted file mode 100644 index 52860aae61a..00000000000 --- a/regression/cpp-from-CVS/Function_Arguments3/main.cpp +++ /dev/null @@ -1,34 +0,0 @@ -#include - -int global; - -// these are in fact the same -void f(const int i) -{ - global=10; -} - -void f(int i); - -// the following two are *different*! -void g(int *p) -{ - global=20; -} - -void g(const int *p) -{ - global=30; -} - -int main() -{ - f(0); - assert(global==10); - - g((int *)0); - assert(global==20); - - g((const int *)0); - assert(global==30); -} diff --git a/regression/cpp-from-CVS/Function_Arguments4/main.cpp b/regression/cpp-from-CVS/Function_Arguments4/main.cpp deleted file mode 100644 index 82555544910..00000000000 --- a/regression/cpp-from-CVS/Function_Arguments4/main.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include - -int i; - -struct B -{ - B() { i++; } - B(const B& b) { i+=10; } -}; - - -B f(B b) -{ - assert(i==11); - return b; -} - - -int main() -{ - B b; - b = f(b); - assert(i==21); -} diff --git a/regression/cpp-from-CVS/Function_Arguments5/main.cpp b/regression/cpp-from-CVS/Function_Arguments5/main.cpp deleted file mode 100644 index c417646b161..00000000000 --- a/regression/cpp-from-CVS/Function_Arguments5/main.cpp +++ /dev/null @@ -1,10 +0,0 @@ -bool func(const int& i) {return false;} -bool func(const int* i) {return true;} - -int main() -{ - int k; - int& rk = k; - assert(!func(rk)); - assert(func(&k)); -} diff --git a/regression/cpp-from-CVS/Function_Arguments5/test.desc b/regression/cpp-from-CVS/Function_Arguments5/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Function_Arguments5/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Function_Pointer1/main.cpp b/regression/cpp-from-CVS/Function_Pointer1/main.cpp deleted file mode 100644 index 723671c5780..00000000000 --- a/regression/cpp-from-CVS/Function_Pointer1/main.cpp +++ /dev/null @@ -1,13 +0,0 @@ -int f(int x) -{ - assert(x==1); -} - -int main() -{ - int (*p)(int); - - p=f; - - p(1); -} diff --git a/regression/cpp-from-CVS/Function_Pointer1/test.desc b/regression/cpp-from-CVS/Function_Pointer1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Function_Pointer1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Implicit_Conversion1/main.cpp b/regression/cpp-from-CVS/Implicit_Conversion1/main.cpp deleted file mode 100644 index 98b0c1b2822..00000000000 --- a/regression/cpp-from-CVS/Implicit_Conversion1/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -struct A -{ - int i; -}; - -struct B: public A { - int j; -}; - -int func(A a) -{ - return a.i; -} - -int main() -{ - B b; - b.i = 1; - assert(func(b)==1); -} diff --git a/regression/cpp-from-CVS/Implicit_Conversion1/test.desc b/regression/cpp-from-CVS/Implicit_Conversion1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Implicit_Conversion1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Implicit_Conversion2/main.cpp b/regression/cpp-from-CVS/Implicit_Conversion2/main.cpp deleted file mode 100644 index 6dcdf0a8d06..00000000000 --- a/regression/cpp-from-CVS/Implicit_Conversion2/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ -char func1(const char& c) -{ - return c; -} - - -int main() -{ - assert(func1((char)10)==10); - - int i(20); - assert(func1((char)i)==20); - -} diff --git a/regression/cpp-from-CVS/Implicit_Conversion3/main.cpp b/regression/cpp-from-CVS/Implicit_Conversion3/main.cpp deleted file mode 100644 index 0687793c6e5..00000000000 --- a/regression/cpp-from-CVS/Implicit_Conversion3/main.cpp +++ /dev/null @@ -1,26 +0,0 @@ -struct A -{ - int i; - A():i(0) {} - A(int i):i(i){} -}; - -struct B -{ - int j; - B():j(0) {} - B(int j): j(j) {} - B(const A& a):j(a.i){} -}; - -B operator+(const B b1, B b2) -{ - return B( b1.j + b2.j ); -} - -int main() -{ - A a(10); - B b = a + a; - assert(b.j == 20); -} diff --git a/regression/cpp-from-CVS/Implicit_Conversion4/main.cpp b/regression/cpp-from-CVS/Implicit_Conversion4/main.cpp deleted file mode 100644 index 7609dfdce9a..00000000000 --- a/regression/cpp-from-CVS/Implicit_Conversion4/main.cpp +++ /dev/null @@ -1,82 +0,0 @@ -struct B -{ - int j; - B(int j):j(j){} -}; - -struct A -{ - int i; - A(int i): i(i) {} - A(const B& b):i(b.j){} -}; - -struct C: public A -{ - C(int i): A(i){} -}; - - -int func1(const A& a) -{ - return a.i; -} - -int func2(A& a) -{ - return a.i; -} - -int func3(A a) -{ - return a.i; -} - -int main() -{ - A a1(10); - assert(func1(a1)==10); - assert(func2(a1)==10); - assert(func3(a1)==10); - - const A a2(20); - assert(func1(a2)==20); - assert(func3(a2)==20); - - A& r1 = a1; - assert(func1(r1)==10); - assert(func2(r1)==10); - assert(func3(r1)==10); - - const A& r2 = a1; - assert(func1(r2)==10); - assert(func3(r2)==10); - - B b1(30); - assert(func3(b1)==30); - - B& r3 = b1; - assert(func3(r3)==30); - - const B& r4 = b1; - assert(func3(r4)==30); - - C c1(40); - assert(func1(c1)==40); - assert(func2(c1)==40); - assert(func3(c1)==40); - - const C c2(50); - assert(func1(c2)==50); - assert(func3(c2)==50); - - C& r5 = c1; - assert(func1(r5)==40); - assert(func2(r5)==40); - assert(func3(r5)==40); - - const C& r6 = c2; - assert(func1(r6)==50); - assert(func3(r6)==50); - -} diff --git a/regression/cpp-from-CVS/Implicit_Conversion4/test.desc b/regression/cpp-from-CVS/Implicit_Conversion4/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Implicit_Conversion4/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Implicit_Conversion5/main.cpp b/regression/cpp-from-CVS/Implicit_Conversion5/main.cpp deleted file mode 100644 index 8c65195f099..00000000000 --- a/regression/cpp-from-CVS/Implicit_Conversion5/main.cpp +++ /dev/null @@ -1,7 +0,0 @@ -void f(int); - -int main() -{ - char* pc; - f(pc); // invalid conversion -} diff --git a/regression/cpp-from-CVS/Implicit_Conversion6/main.cpp b/regression/cpp-from-CVS/Implicit_Conversion6/main.cpp deleted file mode 100644 index dd3549747ac..00000000000 --- a/regression/cpp-from-CVS/Implicit_Conversion6/main.cpp +++ /dev/null @@ -1,7 +0,0 @@ -bool f(const char *) {return true;} -bool f(int) {return false;} - -int main() -{ - assert(f("hello")); -} diff --git a/regression/cpp-from-CVS/Implicit_Conversion6/test.desc b/regression/cpp-from-CVS/Implicit_Conversion6/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Implicit_Conversion6/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Implicit_Conversion7/main.cpp b/regression/cpp-from-CVS/Implicit_Conversion7/main.cpp deleted file mode 100644 index 64091308c0e..00000000000 --- a/regression/cpp-from-CVS/Implicit_Conversion7/main.cpp +++ /dev/null @@ -1,5 +0,0 @@ -int main() -{ - int a; - assert(&a); -} diff --git a/regression/cpp-from-CVS/Implicit_Conversion7/test.desc b/regression/cpp-from-CVS/Implicit_Conversion7/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Implicit_Conversion7/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Implicit_Conversion8/main.cpp b/regression/cpp-from-CVS/Implicit_Conversion8/main.cpp deleted file mode 100644 index 2868594a2ef..00000000000 --- a/regression/cpp-from-CVS/Implicit_Conversion8/main.cpp +++ /dev/null @@ -1,39 +0,0 @@ -struct Bit { - bool b; - Bit(bool b=false):b(b) {} - Bit(const Bit& bit):b(bit.b) {} - -// operator bool() const {return b;} - - Bit& operator=(bool b) - { - this->b = b; - return *this; - } - - - Bit& operator =(const Bit& bit) - { - this->b = bit.b; - return *this; - } - - - friend const Bit operator ~(const Bit& bit) - { - Bit r; - r.b = ~bit.b; - return r; - } - - friend void b_not( Bit& r, const Bit& a ) - { r = (~a); } -}; - - -int main() -{ - Bit b1, b2; - b_not(b1, b2); - assert(b1.b != b2.b); -} diff --git a/regression/cpp-from-CVS/Implicit_Conversion9/main.cpp b/regression/cpp-from-CVS/Implicit_Conversion9/main.cpp deleted file mode 100644 index 39dc405df5b..00000000000 --- a/regression/cpp-from-CVS/Implicit_Conversion9/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -enum foo {NOT_AFFECTED, FATAL_AFFECT, WARNING}; - -typedef struct { - foo SeverityType; -} BitDatabaseRecordStruct; - -const BitDatabaseRecordStruct BitDataBase [1] = -{ - {NOT_AFFECTED} -}; - -int main() -{ - return 0; -} diff --git a/regression/cpp-from-CVS/Implicit_Conversion9/test.desc b/regression/cpp-from-CVS/Implicit_Conversion9/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Implicit_Conversion9/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Inheritance1/main.cpp b/regression/cpp-from-CVS/Inheritance1/main.cpp deleted file mode 100644 index f7c4cccd9c5..00000000000 --- a/regression/cpp-from-CVS/Inheritance1/main.cpp +++ /dev/null @@ -1,24 +0,0 @@ -class b -{ -public: - int x; - - void f(); -}; - -void b::f() -{ - x=1; -} - -class t:public b -{ -public: -}; - -int main() -{ - t instance; - instance.f(); - assert(instance.x==1); -} diff --git a/regression/cpp-from-CVS/Inheritance1/test.desc b/regression/cpp-from-CVS/Inheritance1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Inheritance1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Inheritance2/main.cpp b/regression/cpp-from-CVS/Inheritance2/main.cpp deleted file mode 100644 index 692b7a27f20..00000000000 --- a/regression/cpp-from-CVS/Inheritance2/main.cpp +++ /dev/null @@ -1,38 +0,0 @@ -class A -{ -public: - int i; - void f(); -}; - -void A::f() -{ - i=1; -} - -class B:public A -{ -public: - int i; - void f() - { - i++; - A::i++; - } -}; - -int main() -{ - B b; - b.i = 0; - b.B::i++; - - b.A::i = 10; - - b.f(); - assert(b.i == 2); - assert(b.A::i == 11); - - b.A::f(); - assert(b.A::i == 1); -} diff --git a/regression/cpp-from-CVS/Inheritance3/main.cpp b/regression/cpp-from-CVS/Inheritance3/main.cpp deleted file mode 100644 index ef2b173312a..00000000000 --- a/regression/cpp-from-CVS/Inheritance3/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -struct A { - typedef int INT; -}; - -struct B: public A -{ - INT i; - void set(INT i) - { - this->i = i; - } -}; - -int main() -{ - B b; - b.i = 0; - b.i++; - assert(b.i==1); -} diff --git a/regression/cpp-from-CVS/Inheritance3/test.desc b/regression/cpp-from-CVS/Inheritance3/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Inheritance3/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Inheritance4/main.cpp b/regression/cpp-from-CVS/Inheritance4/main.cpp deleted file mode 100644 index 58a95de0d34..00000000000 --- a/regression/cpp-from-CVS/Inheritance4/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -struct A{ - int x; - A(){} -}; - -struct B: public A{ - B(){} -}; - -int main() -{ - B b1, b2; - b1 = b2; - assert(b1.x == b2.x); -} diff --git a/regression/cpp-from-CVS/Inheritance4/test.desc b/regression/cpp-from-CVS/Inheritance4/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Inheritance4/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Initializer1/main.cpp b/regression/cpp-from-CVS/Initializer1/main.cpp deleted file mode 100644 index 7f0a99374f2..00000000000 --- a/regression/cpp-from-CVS/Initializer1/main.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include - -const char my_string[]="abc123"; - -int main() -{ - assert(my_string[0]=='a'); - assert(my_string[6]==0); - assert(sizeof(my_string)==7); -} diff --git a/regression/cpp-from-CVS/Initializer1/test.desc b/regression/cpp-from-CVS/Initializer1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Initializer1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Label0/main.cpp b/regression/cpp-from-CVS/Label0/main.cpp deleted file mode 100644 index 00025a6820b..00000000000 --- a/regression/cpp-from-CVS/Label0/main.cpp +++ /dev/null @@ -1,7 +0,0 @@ -int main() -{ -dummy_label: - int i = 0; - - assert(i==0); -} diff --git a/regression/cpp-from-CVS/Label0/test.desc b/regression/cpp-from-CVS/Label0/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Label0/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Linking1/main.cpp b/regression/cpp-from-CVS/Linking1/main.cpp deleted file mode 100644 index 6cd912dc4ab..00000000000 --- a/regression/cpp-from-CVS/Linking1/main.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "module.h" - -extern int i; - -int main() -{ - assert(i==1); - - T t; - t.f(); - - assert(i==2); -} diff --git a/regression/cpp-from-CVS/Linking1/module.cpp b/regression/cpp-from-CVS/Linking1/module.cpp deleted file mode 100644 index 125858be30d..00000000000 --- a/regression/cpp-from-CVS/Linking1/module.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "module.h" - -int i=1; - -void T::f() -{ - i=2; -} diff --git a/regression/cpp-from-CVS/Linking1/test.desc b/regression/cpp-from-CVS/Linking1/test.desc deleted file mode 100644 index 2449051ba1d..00000000000 --- a/regression/cpp-from-CVS/Linking1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp -module.cpp -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Linking2/test_link1.cpp b/regression/cpp-from-CVS/Linking2/test_link1.cpp deleted file mode 100644 index 0d45e4fa116..00000000000 --- a/regression/cpp-from-CVS/Linking2/test_link1.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include - -extern int x; -extern int f(void); - -int main() -{ - int z; - - x=z; - assert(f()==z); -} diff --git a/regression/cpp-from-CVS/Lvalue1/main.cpp b/regression/cpp-from-CVS/Lvalue1/main.cpp deleted file mode 100644 index 15b0f40f58d..00000000000 --- a/regression/cpp-from-CVS/Lvalue1/main.cpp +++ /dev/null @@ -1,26 +0,0 @@ -struct A { - int i; - A():i(0) {} - int get_i(){return i;} -}; - -A factory() { - return A(); -} - -int main() -{ - // Altough the returned value of `factory' is an - // rvalue, gcc accepts to bind it to the `this' - // parameter of the method `get_i'. Note that when used, - // a returned value is stored in a temporary - // (see goto_convertt::remove_function_call). Thus, - // the value returned by a function call can be treated - // as an lvalue. - // - // It's not clear what the best is. Should this code be rejected? - // Is the compatibility with gcc more important? - - assert(factory().get_i() == 0); - -} diff --git a/regression/cpp-from-CVS/Makefile b/regression/cpp-from-CVS/Makefile deleted file mode 100644 index ffb0862dedd..00000000000 --- a/regression/cpp-from-CVS/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -default: tests.log - -test: - @../test.pl -c cbmc - -tests.log: ../test.pl - @../test.pl -c cbmc - -show: - @for dir in *; do \ - if [ -d "$$dir" ]; then \ - vim -o "$$dir/main.c" "$$dir/main.out"; \ - fi; \ - done; - -clean: - find . -name '*.out' -execdir $(RM) '{}' \; - find . -name '*.gb' -execdir $(RM) '{}' \; - $(RM) tests.log diff --git a/regression/cpp-from-CVS/Member_Access_in_Class/main.cpp b/regression/cpp-from-CVS/Member_Access_in_Class/main.cpp deleted file mode 100644 index 34899998764..00000000000 --- a/regression/cpp-from-CVS/Member_Access_in_Class/main.cpp +++ /dev/null @@ -1,16 +0,0 @@ -class t -{ -public: - void f() { i=1; } - - void g() { f(); } - - int i; -}; - -int main() -{ - t instance; - instance.g(); - assert(instance.i==1); -} diff --git a/regression/cpp-from-CVS/Member_Access_in_Class/test.desc b/regression/cpp-from-CVS/Member_Access_in_Class/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Member_Access_in_Class/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Multiple_Inheritance1/main.cpp b/regression/cpp-from-CVS/Multiple_Inheritance1/main.cpp deleted file mode 100644 index 802aa5f9683..00000000000 --- a/regression/cpp-from-CVS/Multiple_Inheritance1/main.cpp +++ /dev/null @@ -1,21 +0,0 @@ -struct A -{ - int i; -}; - -struct B { - int j; - void setJ(int j){this->j = j;} -}; - - -struct C: A, B { - int k; -}; - -int main() -{ - C c; - c.setJ(10); - assert(c.j==10); -} diff --git a/regression/cpp-from-CVS/Multiple_Inheritance2/main.cpp b/regression/cpp-from-CVS/Multiple_Inheritance2/main.cpp deleted file mode 100644 index cb076087222..00000000000 --- a/regression/cpp-from-CVS/Multiple_Inheritance2/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ -struct A{ - int i; - A(){}; -}; -struct B: virtual A{}; -struct C: virtual A{}; -struct D: B, C {}; - -int main() -{ - D d; - d.i = 10; - assert(d.i == 10); -} diff --git a/regression/cpp-from-CVS/Multiple_Inheritance3/main.cpp b/regression/cpp-from-CVS/Multiple_Inheritance3/main.cpp deleted file mode 100644 index 6b031bbe595..00000000000 --- a/regression/cpp-from-CVS/Multiple_Inheritance3/main.cpp +++ /dev/null @@ -1,4 +0,0 @@ -struct A{int i;}; -struct B: A {}; -struct C: A {}; -struct D: virtual B, virtual C {}; // we do not allow this diff --git a/regression/cpp-from-CVS/Multiple_Inheritance4/main.cpp b/regression/cpp-from-CVS/Multiple_Inheritance4/main.cpp deleted file mode 100644 index e98a8cedcc8..00000000000 --- a/regression/cpp-from-CVS/Multiple_Inheritance4/main.cpp +++ /dev/null @@ -1,30 +0,0 @@ - struct ostream - { - ostream(int id): id(id) {} - ostream(const ostream&); // disabled - ostream& operator=(const ostream&); // disabled - int id; - }; - - struct istream - { - istream(int id): id(id) {} - istream(const istream&); // disabled - istream& operator=(const istream&); // disabled - int id; - }; - - struct iostream: ostream, istream - { - iostream(int id): ostream(id), istream(id) {} - iostream(const iostream&); // disabled - iostream& operator=(const iostream&); // disabled - }; - - -int main() -{ - iostream io(1); - assert(io.ostream::id == 1); - assert(io.istream::id == 1); -} diff --git a/regression/cpp-from-CVS/Mutable1/main.cpp b/regression/cpp-from-CVS/Mutable1/main.cpp deleted file mode 100644 index 62120d09a7d..00000000000 --- a/regression/cpp-from-CVS/Mutable1/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -struct A -{ - mutable int i; - void set(int v) const - { - i = v; - } -}; - -int main() -{ - const A a; - a.set(99); - assert(a.i==99); -} diff --git a/regression/cpp-from-CVS/Mutable1/test.desc b/regression/cpp-from-CVS/Mutable1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Mutable1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Overloading_Functions1/main.cpp b/regression/cpp-from-CVS/Overloading_Functions1/main.cpp deleted file mode 100644 index c7177926d30..00000000000 --- a/regression/cpp-from-CVS/Overloading_Functions1/main.cpp +++ /dev/null @@ -1,29 +0,0 @@ -// get closest match - -struct T -{ -public: - T():x(0) { } - - int x; -}; - -int f(int i) { return 1; } -int f(const int *p) { return 2; } -int f(char i) { return 3; } -int f(struct T &t) { return 4; } -int f(const struct T &t) { return 5; } - -int main() -{ - int i; - char ch; - T t; - const T const_t; - - assert(f(i)==1); - assert(f(&i)==2); - assert(f(ch)==3); - assert(f(t)==4); - assert(f(const_t)==5); -} diff --git a/regression/cpp-from-CVS/Overloading_Functions1/test.desc b/regression/cpp-from-CVS/Overloading_Functions1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Overloading_Functions1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Overloading_Functions2/main.cpp b/regression/cpp-from-CVS/Overloading_Functions2/main.cpp deleted file mode 100644 index 56f13da463b..00000000000 --- a/regression/cpp-from-CVS/Overloading_Functions2/main.cpp +++ /dev/null @@ -1,17 +0,0 @@ -struct A { -}; - -struct B: A { -}; - -struct C: B { -}; - -bool f1(A&) {return true;} -bool f1(B&) {return false;} - -int main() -{ - C c; - assert(f1(c)==false); -} diff --git a/regression/cpp-from-CVS/Overloading_Functions3/main.cpp b/regression/cpp-from-CVS/Overloading_Functions3/main.cpp deleted file mode 100644 index 5e53142da6f..00000000000 --- a/regression/cpp-from-CVS/Overloading_Functions3/main.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include - -// these are _different_ - -int f(char) -{ - return 1; -} - -int f(unsigned char) -{ - return 2; -} - -int f(short int) -{ - return 3; -} - -int f(int) -{ - return 4; -} - -int f(unsigned int) -{ - return 5; -} - -int f(long int) -{ - return 6; -} - -// not the same as long int -int f(long long) -{ - return 7; -} - -int f(float) -{ - return 8; -} - -int f(double) -{ - return 9; -} - -// not the same as double! -int f(long double) -{ - return 10; -} - -int main() -{ - assert(f((char)0)==1); - assert(f((unsigned char)0)==2); - assert(f((short int)0)==3); - assert(f((int)0)==4); - assert(f((unsigned int)0)==5); - assert(f((long int)0)==6); - assert(f((long long)0)==7); - assert(f((float)0)==8); - assert(f((double)0)==9); - assert(f((long double)0)==10); -} diff --git a/regression/cpp-from-CVS/Overloading_Functions3/test.desc b/regression/cpp-from-CVS/Overloading_Functions3/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Overloading_Functions3/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Overloading_Functions4/main.cpp b/regression/cpp-from-CVS/Overloading_Functions4/main.cpp deleted file mode 100644 index 45450811ee7..00000000000 --- a/regression/cpp-from-CVS/Overloading_Functions4/main.cpp +++ /dev/null @@ -1,13 +0,0 @@ -double pow(double _X, double _Y); -double pow(double _X, int _Y); -float pow(float _X, float _Y); -float pow(float _X, int _Y); -long double pow(long double _X, long double _Y); -long double pow(long double _X, int _Y); - -int main() -{ - double x; - // the literal types select the function - x=pow(2.0f, 3); -} diff --git a/regression/cpp-from-CVS/Overloading_Functions4/test.desc b/regression/cpp-from-CVS/Overloading_Functions4/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Overloading_Functions4/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Overloading_Increment1/main.cpp b/regression/cpp-from-CVS/Overloading_Increment1/main.cpp deleted file mode 100644 index 6fbb8c5269b..00000000000 --- a/regression/cpp-from-CVS/Overloading_Increment1/main.cpp +++ /dev/null @@ -1,43 +0,0 @@ -struct A -{ - int a; - A operator++(int zero) - { - A obj(*this); - a++; - return obj; - } - - A& operator++() - { - a++; - return *this; - } - - A operator--(int zero) - { - A obj(*this); - a--; - return obj; - } - - A& operator--() - { - a--; - return *this; - } -}; - -int main() -{ - A obj; - obj.a = 0; - A obj2 = obj++; - assert(obj2.a == 0 && obj.a==1); - obj2 = ++obj; - assert(obj2.a == 2 && obj.a==2); - obj2 = obj--; - assert(obj2.a == 2 && obj.a==1); - obj2 = --obj; - assert(obj2.a == 0 && obj.a==0); -} diff --git a/regression/cpp-from-CVS/Overloading_Increment1/test.desc b/regression/cpp-from-CVS/Overloading_Increment1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Overloading_Increment1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Overloading_Members1/main.cpp b/regression/cpp-from-CVS/Overloading_Members1/main.cpp deleted file mode 100644 index cd1af5f2668..00000000000 --- a/regression/cpp-from-CVS/Overloading_Members1/main.cpp +++ /dev/null @@ -1,22 +0,0 @@ -class T -{ -public: - int f() const - { - return 1; - } - - int f() - { - return 2; - } -}; - -int main() -{ - T x; - const T x_const; - - assert(x_const.f()==1); - assert(x.f()==2); -} diff --git a/regression/cpp-from-CVS/Overloading_Members1/test.desc b/regression/cpp-from-CVS/Overloading_Members1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Overloading_Members1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Overloading_Operators1/main.cpp b/regression/cpp-from-CVS/Overloading_Operators1/main.cpp deleted file mode 100644 index 1dfeeebe1f6..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators1/main.cpp +++ /dev/null @@ -1,27 +0,0 @@ -class T -{ -public: -}; - -int operator+(T a, int b) -{ - return b; -} - -int operator-(T a, int b) -{ - return -b; -} - -int main() -{ - T x; - - int temp; - - temp=x+2; - assert(temp==2); - - temp=x-3; - assert(temp==-3); -} diff --git a/regression/cpp-from-CVS/Overloading_Operators10/main.cpp b/regression/cpp-from-CVS/Overloading_Operators10/main.cpp deleted file mode 100644 index 5bb82e98875..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators10/main.cpp +++ /dev/null @@ -1,22 +0,0 @@ -struct A -{ - bool True(){return true;} -}; - -struct B -{ - A a; - A* operator->(){return &a;} -}; - -struct C -{ - B b; - B& operator->(){return b;} -}; - -int main() -{ - C c; - assert(c->True()); -} diff --git a/regression/cpp-from-CVS/Overloading_Operators11/main.cpp b/regression/cpp-from-CVS/Overloading_Operators11/main.cpp deleted file mode 100644 index 83b333353e8..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators11/main.cpp +++ /dev/null @@ -1,21 +0,0 @@ -struct C { - bool b; - C(bool b):b(b){} -}; - -struct A { - C c1; - - A():c1(false) {} - const C* operator->() const {return &c1;} -}; - -struct B : A { - bool func() const { return (*this)->b;} -}; - -int main() -{ - const B b1; - assert(b1.func() == false); -} diff --git a/regression/cpp-from-CVS/Overloading_Operators12/main.cpp b/regression/cpp-from-CVS/Overloading_Operators12/main.cpp deleted file mode 100644 index 19c84c54078..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators12/main.cpp +++ /dev/null @@ -1,10 +0,0 @@ -struct A { - bool operator << (const A&) const {return true;} - bool func(const A& a)const{ return operator <<(a);} -}; - -int main() -{ - A a; - assert(a.func(a)==true); -} diff --git a/regression/cpp-from-CVS/Overloading_Operators12/test.desc b/regression/cpp-from-CVS/Overloading_Operators12/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators12/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Overloading_Operators13/main.cpp b/regression/cpp-from-CVS/Overloading_Operators13/main.cpp deleted file mode 100644 index 7b18f5d61a0..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators13/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -struct A { - bool operator[](int index) {return true;} -}; - -struct B { - A a; - bool operator[](int index) {return false;} - bool func(){return a[0];} -}; - -int main() -{ - B b; - assert(b.func()==true); -} diff --git a/regression/cpp-from-CVS/Overloading_Operators13/test.desc b/regression/cpp-from-CVS/Overloading_Operators13/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators13/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Overloading_Operators14/main.cpp b/regression/cpp-from-CVS/Overloading_Operators14/main.cpp deleted file mode 100644 index 5a7244a4f6b..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators14/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ -struct A -{ - typedef int INT; - int i; - operator INT() { return i;} - INT value(){return operator INT();} -}; - -int main() -{ - A a; - a.i = 20; - assert( a.value() == 20); -} diff --git a/regression/cpp-from-CVS/Overloading_Operators16/main.cpp b/regression/cpp-from-CVS/Overloading_Operators16/main.cpp deleted file mode 100644 index 1ef26c04484..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators16/main.cpp +++ /dev/null @@ -1,24 +0,0 @@ -class module_name -{ - public: - operator const char*() ; - operator int(); - operator char(); - operator long long(); - operator unsigned int(); - operator bool(); -}; - -void f (module_name name) { - (const char*) name; - name .operator const char *(); - name .operator int(); - name .operator char(); - name .operator bool(); - name.operator unsigned int(); - name.operator long long(); -} - -int main(int argc, char* argv[]) -{ -} diff --git a/regression/cpp-from-CVS/Overloading_Operators2/main.cpp b/regression/cpp-from-CVS/Overloading_Operators2/main.cpp deleted file mode 100644 index 9e58e301bd0..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators2/main.cpp +++ /dev/null @@ -1,25 +0,0 @@ -class C -{ -public: - C(int _base):base(_base) { } - - int operator [] (int x) - { - return base+x; - } - - int operator [] (class Z &z) - { - return 0; - } - - int base; -}; - -int main() -{ - C c(1); - - assert(c[0]==1); - assert(c[2]==3); -} diff --git a/regression/cpp-from-CVS/Overloading_Operators2/test.desc b/regression/cpp-from-CVS/Overloading_Operators2/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators2/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Overloading_Operators4/main.cpp b/regression/cpp-from-CVS/Overloading_Operators4/main.cpp deleted file mode 100644 index f557ef63832..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators4/main.cpp +++ /dev/null @@ -1,35 +0,0 @@ -struct X -{ - X():i(1), j(2) - { - } - - int i; - int j; - - bool operator == (const struct X &o) - { - return i==o.i && - j==o.j; - } - - bool func() - { - X x1, x2; - x1.i = 2; - return x1 == x2; - } -}; - -void doit() -{ - X a, b; - - assert(a==b); -} - -int main() -{ - doit(); - assert(!X().func()); -} diff --git a/regression/cpp-from-CVS/Overloading_Operators5/main.cpp b/regression/cpp-from-CVS/Overloading_Operators5/main.cpp deleted file mode 100644 index 5110a7aef0b..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators5/main.cpp +++ /dev/null @@ -1,35 +0,0 @@ -int g; - -struct X -{ - X() - { - } - - int i; - int j; - - X &operator= (const struct X &r); -}; - -X &X::operator= (const struct X &r) -{ - g=2; - return *this; -} - -void doit() -{ - X a, b; - - g=1; - - a=b; - - assert(g==2); -} - -int main() -{ - doit(); -} diff --git a/regression/cpp-from-CVS/Overloading_Operators6/main.cpp b/regression/cpp-from-CVS/Overloading_Operators6/main.cpp deleted file mode 100644 index bb957c3f9ef..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators6/main.cpp +++ /dev/null @@ -1,46 +0,0 @@ -struct A -{ - int i; - A():i(1) {} - - int& operator* () {return i;} - int operator+ (int j) {return i+j;} - int operator~ () {return ~i;} - int operator[] (int k) {return i;} - int operator== (int k) {return i=i;} - - void func1() - { - A a; - assert(*a == 1); - assert(*a + 1 == 2); - assert(~a == ~1); - assert(a[2] == *a); - assert(a == 1); - } - - void func2() - { - A a; - assert((*this) == 1); - assert((*this) + 1 == 2); - assert(~(*this) == ~1); - assert((*this)[2] == *(*this)); - assert((*this) == 1); - } - -}; - - -int main() -{ - A o; - assert(*o == 1); - assert(*o + 1 == 2); - assert(~o == ~1); - assert(o[2] == *o); - assert(o == 1); - - o.func1(); - o.func2(); -} diff --git a/regression/cpp-from-CVS/Overloading_Operators7/main.cpp b/regression/cpp-from-CVS/Overloading_Operators7/main.cpp deleted file mode 100644 index 0b09d0f9624..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators7/main.cpp +++ /dev/null @@ -1,21 +0,0 @@ -int g; - -struct A -{ - int i; - A(int i):i(i) {} - - friend bool operator==(const A& a1, const A& a2) - { - g=10; - return a1.i==a2.i; - } -}; - -int main() -{ - A a1(1); - A a2(2); - assert(!(a1 == a2)); - assert(g==10); -} diff --git a/regression/cpp-from-CVS/Overloading_Operators7/test.desc b/regression/cpp-from-CVS/Overloading_Operators7/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators7/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Overloading_Operators8/main.cpp b/regression/cpp-from-CVS/Overloading_Operators8/main.cpp deleted file mode 100644 index fe018e737b6..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators8/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -struct A { - int i; -}; - -A& operator <<(A& a1, A& a2) -{ - a1.i=a2.i; - a2.i=0; - return a1; -} - -int main() -{ - A a1, a2; - a2.i = 400; - A a3(a1 << a2); - assert(a2.i==0); - assert(a3.i==a1.i); - assert(a1.i==400); -} diff --git a/regression/cpp-from-CVS/Overloading_Operators8/test.desc b/regression/cpp-from-CVS/Overloading_Operators8/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators8/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Overloading_Operators9/main.cpp b/regression/cpp-from-CVS/Overloading_Operators9/main.cpp deleted file mode 100644 index f7007039bd8..00000000000 --- a/regression/cpp-from-CVS/Overloading_Operators9/main.cpp +++ /dev/null @@ -1,30 +0,0 @@ - -struct C -{ - int d; -}; - -struct B -{ - C c; - C* operator->() - { - return &c; - } -}; - -struct A -{ - B b; - B& operator->() - { - return b; - } -}; - -int main() -{ - A a; - a->d = 2; - assert(a.b.c.d==2); -} diff --git a/regression/cpp-from-CVS/Pointer_Conversion2/main.cpp b/regression/cpp-from-CVS/Pointer_Conversion2/main.cpp deleted file mode 100644 index 467411f605a..00000000000 --- a/regression/cpp-from-CVS/Pointer_Conversion2/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ -char a[100]; - -void f(const signed char x[]) -{ - assert(x[0]==0); -} - -int main() -{ - f(a); -} diff --git a/regression/cpp-from-CVS/Pointer_Conversion2/test.desc b/regression/cpp-from-CVS/Pointer_Conversion2/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Pointer_Conversion2/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Pointer_Conversion3/main.cpp b/regression/cpp-from-CVS/Pointer_Conversion3/main.cpp deleted file mode 100644 index e7a36e59709..00000000000 --- a/regression/cpp-from-CVS/Pointer_Conversion3/main.cpp +++ /dev/null @@ -1,17 +0,0 @@ -struct A { - int i; - -}; - -struct B -{ - int j; - int k; -}; - -int main() -{ - A* pa; - B* pb; - pb = static_cast(pa); // ill-formed -} diff --git a/regression/cpp-from-CVS/Pointer_To_Member1/main.cpp b/regression/cpp-from-CVS/Pointer_To_Member1/main.cpp deleted file mode 100644 index 62e9d88feb8..00000000000 --- a/regression/cpp-from-CVS/Pointer_To_Member1/main.cpp +++ /dev/null @@ -1,16 +0,0 @@ -class A -{ - public: - int f(char i){return i+1;} -}; - -A a; -int (A::* paf)(char) = &A::f; -int main() -{ - int v1 = (a.*paf)(0); - int v2 = ((&a)->*paf)(1); - - assert(v1 == 1); - assert(v2 == 2); -} diff --git a/regression/cpp-from-CVS/Pointer_To_Member1/test.desc b/regression/cpp-from-CVS/Pointer_To_Member1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Pointer_To_Member1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Pointer_To_Member2/main.cpp b/regression/cpp-from-CVS/Pointer_To_Member2/main.cpp deleted file mode 100644 index f28348526ab..00000000000 --- a/regression/cpp-from-CVS/Pointer_To_Member2/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ -class A -{ - int a; -}; - -int f(A* pa, char i) {return i+1;} - -int main() -{ - int (A::* paf)(char) = &f; // ill-formed -} diff --git a/regression/cpp-from-CVS/Pointer_To_Member3/main.cpp b/regression/cpp-from-CVS/Pointer_To_Member3/main.cpp deleted file mode 100644 index f674920c66c..00000000000 --- a/regression/cpp-from-CVS/Pointer_To_Member3/main.cpp +++ /dev/null @@ -1,12 +0,0 @@ -class A -{ - public: - int a; - int f(char i){return i+1;} -}; - - -int main() -{ - int (* pf)(A*, char) = &A::f; // ill-formed -} diff --git a/regression/cpp-from-CVS/Pointer_To_Member4/main.cpp b/regression/cpp-from-CVS/Pointer_To_Member4/main.cpp deleted file mode 100644 index 5b36451b909..00000000000 --- a/regression/cpp-from-CVS/Pointer_To_Member4/main.cpp +++ /dev/null @@ -1,12 +0,0 @@ -class A -{ - public: - int f(){return 1;} -}; - -int main() -{ - int (A::* paf)() = &A::f; - A a; - (*paf)(&a); // ill-formed -} diff --git a/regression/cpp-from-CVS/Pointer_To_Member5/main.cpp b/regression/cpp-from-CVS/Pointer_To_Member5/main.cpp deleted file mode 100644 index f79f05c3c46..00000000000 --- a/regression/cpp-from-CVS/Pointer_To_Member5/main.cpp +++ /dev/null @@ -1,21 +0,0 @@ - -struct A -{ - int i; - int func(){return i;} -}; - -struct B -{ - A* pa; - int (A::* pmethod)(); - B(A* pa, int (A::* pmethod)()):pa(pa), pmethod(pmethod) {} - int eval(){return (pa->*pmethod)();} -}; - -int main() -{ - A a; - B b(&a, &A::func); - assert(b.eval() == a.i); -} diff --git a/regression/cpp-from-CVS/Pointer_To_Member5/test.desc b/regression/cpp-from-CVS/Pointer_To_Member5/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Pointer_To_Member5/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Pointer_To_Member6/main.cpp b/regression/cpp-from-CVS/Pointer_To_Member6/main.cpp deleted file mode 100644 index 3ab65447e5d..00000000000 --- a/regression/cpp-from-CVS/Pointer_To_Member6/main.cpp +++ /dev/null @@ -1,21 +0,0 @@ -struct A -{ - int i; - void func(){i = 10;} -}; - -struct B: public A -{ - void (A::* pmeth)(); - B(): - pmeth(&A::func) - { - (this->*pmeth)(); - } -}; - -int main() -{ - B b; - assert(b.i == 10); -} diff --git a/regression/cpp-from-CVS/Protection1/main.cpp b/regression/cpp-from-CVS/Protection1/main.cpp deleted file mode 100644 index 5b0131782dc..00000000000 --- a/regression/cpp-from-CVS/Protection1/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ -class A -{ - int i; - A(int i):i(i) {} - private: - A(); // disabled -}; - -class B: A -{ -}; diff --git a/regression/cpp-from-CVS/Protection2/main.cpp b/regression/cpp-from-CVS/Protection2/main.cpp deleted file mode 100644 index 02885d9e419..00000000000 --- a/regression/cpp-from-CVS/Protection2/main.cpp +++ /dev/null @@ -1,19 +0,0 @@ -struct A -{ - protected: - int i; -}; - -class B: A -{ - public: - void set(int i) {this->i = i;} - int get() const {return i;} -}; - -int main() -{ - B b; - b.set(0); - assert(b.get()== 0); -} diff --git a/regression/cpp-from-CVS/Protection2/test.desc b/regression/cpp-from-CVS/Protection2/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Protection2/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Protection3/main.cpp b/regression/cpp-from-CVS/Protection3/main.cpp deleted file mode 100644 index aa745b53f35..00000000000 --- a/regression/cpp-from-CVS/Protection3/main.cpp +++ /dev/null @@ -1,10 +0,0 @@ -class A -{ - int i; - - public: - class B - { - int get(const A& a){return a.i;} - }; -}; diff --git a/regression/cpp-from-CVS/Protection4/main.cpp b/regression/cpp-from-CVS/Protection4/main.cpp deleted file mode 100644 index edb5b11ead1..00000000000 --- a/regression/cpp-from-CVS/Protection4/main.cpp +++ /dev/null @@ -1,12 +0,0 @@ -struct A -{ - private: - int i; -}; - -class B: public A -{ - public: - void set(int i) {this->i = i;} - int get() const {return i;} -}; diff --git a/regression/cpp-from-CVS/Protection5/main.cpp b/regression/cpp-from-CVS/Protection5/main.cpp deleted file mode 100644 index e654089c391..00000000000 --- a/regression/cpp-from-CVS/Protection5/main.cpp +++ /dev/null @@ -1,21 +0,0 @@ -class A -{ - public: - int i; -}; - -class B: A -{ - -}; - -void set_one(A& a) -{ - a.i = 1; -} - -int main() -{ - B b; - set_one(b); -} diff --git a/regression/cpp-from-CVS/Protection6/main.cpp b/regression/cpp-from-CVS/Protection6/main.cpp deleted file mode 100644 index 72f33b28e54..00000000000 --- a/regression/cpp-from-CVS/Protection6/main.cpp +++ /dev/null @@ -1,8 +0,0 @@ -class A { - static void func(){} -}; - -int main() -{ - A::func(); -} diff --git a/regression/cpp-from-CVS/Protection7/main.cpp b/regression/cpp-from-CVS/Protection7/main.cpp deleted file mode 100644 index 6194604583f..00000000000 --- a/regression/cpp-from-CVS/Protection7/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -struct A -{ - int i; - A(){}; - protected: - A(int i):i(i){} - -}; - -struct B: A -{ - B():A(0){} -}; - -B b; - -int main() -{ - assert(b.i==0); -} diff --git a/regression/cpp-from-CVS/Protection7/test.desc b/regression/cpp-from-CVS/Protection7/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Protection7/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Protection8/main.cpp b/regression/cpp-from-CVS/Protection8/main.cpp deleted file mode 100644 index b0b2de06b11..00000000000 --- a/regression/cpp-from-CVS/Protection8/main.cpp +++ /dev/null @@ -1,21 +0,0 @@ -struct A -{ - protected: - int i; - int get_i() {return i;} - - A(int i):i(i){} - -}; - -struct B: A -{ - B():A(0){} -}; - -B b; - -int main() -{ - assert(b.get_i()==0); -} diff --git a/regression/cpp-from-CVS/Qualifier1/main.cpp b/regression/cpp-from-CVS/Qualifier1/main.cpp deleted file mode 100644 index d2219dc9ef9..00000000000 --- a/regression/cpp-from-CVS/Qualifier1/main.cpp +++ /dev/null @@ -1,12 +0,0 @@ -struct A { - int a; -}; - -struct B -{ - void f() - { - A::a = 1; // ill-formed - - } -}; diff --git a/regression/cpp-from-CVS/Qualifier2/main.cpp b/regression/cpp-from-CVS/Qualifier2/main.cpp deleted file mode 100644 index d51626ee97c..00000000000 --- a/regression/cpp-from-CVS/Qualifier2/main.cpp +++ /dev/null @@ -1,24 +0,0 @@ -struct A -{ - static int i; -}; - -struct B: public A -{ - static int i; -}; - -int main() -{ - A::i = 0; - B::i = 1; - assert(A::i == 0); - assert(B::i == 1); - - B obj; - obj.i++; - assert(B::i == 2); - obj.A::i++; - assert(A::i == 1); - -} diff --git a/regression/cpp-from-CVS/Qualifier2/test.desc b/regression/cpp-from-CVS/Qualifier2/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Qualifier2/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Qualifier4/main.cpp b/regression/cpp-from-CVS/Qualifier4/main.cpp deleted file mode 100644 index 7c8722b0aca..00000000000 --- a/regression/cpp-from-CVS/Qualifier4/main.cpp +++ /dev/null @@ -1,9 +0,0 @@ -struct A -{ - int f(); -}; - -int main() -{ - int i = (int) A::f; -} diff --git a/regression/cpp-from-CVS/Reference1/main.cpp b/regression/cpp-from-CVS/Reference1/main.cpp deleted file mode 100644 index b14812ada8f..00000000000 --- a/regression/cpp-from-CVS/Reference1/main.cpp +++ /dev/null @@ -1,22 +0,0 @@ -int g; - -void function(int &ref) -{ - ref=2; -} - -int main() -{ - int &r=g; - - r=1; - - assert(g==1); - - function(r); - - assert(g==2); - - // ?: does produce an l-value, apparently - int &s=g?r:g; -} diff --git a/regression/cpp-from-CVS/Reference2/main.cpp b/regression/cpp-from-CVS/Reference2/main.cpp deleted file mode 100644 index 69c74c1f18e..00000000000 --- a/regression/cpp-from-CVS/Reference2/main.cpp +++ /dev/null @@ -1,29 +0,0 @@ -int g; - -class X -{ -}; - -int &function() -{ - return g; -} - -int main() -{ - g=1; - function()=2; - assert(g==2); - - { - int *p=&g; - int &r=*p; - assert(r==2); - } - - { - X x; - X *p=&x; - X &r=*p; - } -} diff --git a/regression/cpp-from-CVS/Reference2/test.desc b/regression/cpp-from-CVS/Reference2/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Reference2/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Reference3/main.cpp b/regression/cpp-from-CVS/Reference3/main.cpp deleted file mode 100644 index 052233e98c7..00000000000 --- a/regression/cpp-from-CVS/Reference3/main.cpp +++ /dev/null @@ -1,18 +0,0 @@ -class A -{ - public: - int& i; - A(int &i):i(i) {} - private: - A& operator=(const A&); -}; - -int main() -{ - int var; - int& ref =var; - var = 10; - A a(var); - a.i = 20; - assert(var==20); -} diff --git a/regression/cpp-from-CVS/Reference3/test.desc b/regression/cpp-from-CVS/Reference3/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Reference3/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Reference4/main.cpp b/regression/cpp-from-CVS/Reference4/main.cpp deleted file mode 100644 index 9de7c1c0203..00000000000 --- a/regression/cpp-from-CVS/Reference4/main.cpp +++ /dev/null @@ -1,3 +0,0 @@ -class A{ - int& a; -}; diff --git a/regression/cpp-from-CVS/Reference5/main.cpp b/regression/cpp-from-CVS/Reference5/main.cpp deleted file mode 100644 index 7eb9f918bea..00000000000 --- a/regression/cpp-from-CVS/Reference5/main.cpp +++ /dev/null @@ -1,5 +0,0 @@ -class A -{ - int & a; - A():a(){} -}; diff --git a/regression/cpp-from-CVS/Reference6/main.cpp b/regression/cpp-from-CVS/Reference6/main.cpp deleted file mode 100644 index cb407b9bb13..00000000000 --- a/regression/cpp-from-CVS/Reference6/main.cpp +++ /dev/null @@ -1,25 +0,0 @@ -class X -{ -public: - int x; - - X():x(0) - { - } -}; - -X g, y; - -X &r() -{ - return g; -} - -int main() -{ - y.x=10; - - r()=y; - - assert(g.x==10); -} diff --git a/regression/cpp-from-CVS/Reference6/test.desc b/regression/cpp-from-CVS/Reference6/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Reference6/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Reference7/main.cpp b/regression/cpp-from-CVS/Reference7/main.cpp deleted file mode 100644 index 34cacff40fb..00000000000 --- a/regression/cpp-from-CVS/Reference7/main.cpp +++ /dev/null @@ -1,8 +0,0 @@ - -int main() -{ - int i = 8; - int* p = &i; - int*& rp = p; - assert(*rp == 8); -} diff --git a/regression/cpp-from-CVS/Reference7/test.desc b/regression/cpp-from-CVS/Reference7/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Reference7/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Reference8/main.cpp b/regression/cpp-from-CVS/Reference8/main.cpp deleted file mode 100644 index 865aff6e796..00000000000 --- a/regression/cpp-from-CVS/Reference8/main.cpp +++ /dev/null @@ -1,4 +0,0 @@ -int main() -{ - int *&* p; // parsing error -} diff --git a/regression/cpp-from-CVS/Resolver13/main.cpp b/regression/cpp-from-CVS/Resolver13/main.cpp deleted file mode 100644 index a8799debe84..00000000000 --- a/regression/cpp-from-CVS/Resolver13/main.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include - -struct A -{ - A* operator->() { return this; } - int one() { return 1; } - int one(int &i){ i = 1;} -}; - -struct B: public A -{ - A* operator->(){ return this; } -}; - -int main() -{ - B b; - assert(b->one() == 1); -} diff --git a/regression/cpp-from-CVS/Resolver5/main.cpp b/regression/cpp-from-CVS/Resolver5/main.cpp deleted file mode 100644 index df0f977a404..00000000000 --- a/regression/cpp-from-CVS/Resolver5/main.cpp +++ /dev/null @@ -1,18 +0,0 @@ -namespace n1 -{ - struct A { - int i; - }; - - int func(A a) {return a.i;} -} - -int main() -{ - n1::A obj1; - obj1.i = 200; - - assert(func(obj1) == 200); // Argument-dependant name lookup - - return 0; -} diff --git a/regression/cpp-from-CVS/Resolver6/main.cpp b/regression/cpp-from-CVS/Resolver6/main.cpp deleted file mode 100644 index 61685b4db15..00000000000 --- a/regression/cpp-from-CVS/Resolver6/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -bool f(char c) -{ - return false; -} - -bool f(int i, int j = 0) -{ - return true; -} - -int main() -{ - assert(f(5)); - return 0; -} diff --git a/regression/cpp-from-CVS/Resolver6/test.desc b/regression/cpp-from-CVS/Resolver6/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Resolver6/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Resolver7/main.cpp b/regression/cpp-from-CVS/Resolver7/main.cpp deleted file mode 100644 index 2b3035def8c..00000000000 --- a/regression/cpp-from-CVS/Resolver7/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ -extern const char hello []; - -bool func(const char* str) {return true;} -bool func(char* ) {return false;} - -int main() -{ - assert(func(hello)); -} - -const char hello[] = "hello"; diff --git a/regression/cpp-from-CVS/Resolver7/test.desc b/regression/cpp-from-CVS/Resolver7/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Resolver7/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Resolver8/main.cpp b/regression/cpp-from-CVS/Resolver8/main.cpp deleted file mode 100644 index f1d7300996e..00000000000 --- a/regression/cpp-from-CVS/Resolver8/main.cpp +++ /dev/null @@ -1,13 +0,0 @@ -bool func() {return true;} - -bool func(int i) -{ - if(i==0) - return false; - return func(); -} - -int main() -{ - assert(func(1)); -} diff --git a/regression/cpp-from-CVS/Resolver8/test.desc b/regression/cpp-from-CVS/Resolver8/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Resolver8/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Resolver9/main.cpp b/regression/cpp-from-CVS/Resolver9/main.cpp deleted file mode 100644 index 259d94951fb..00000000000 --- a/regression/cpp-from-CVS/Resolver9/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ -struct A -{ - typedef int INT; -}; - -struct B: A{}; - -int main() -{ - B::INT i; -} diff --git a/regression/cpp-from-CVS/Resolver9/test.desc b/regression/cpp-from-CVS/Resolver9/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Resolver9/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/STL1/main.cpp b/regression/cpp-from-CVS/STL1/main.cpp deleted file mode 100644 index 065d7d250e2..00000000000 --- a/regression/cpp-from-CVS/STL1/main.cpp +++ /dev/null @@ -1,59 +0,0 @@ -#include -#include -#include - -struct X -{ - int i; -}; - -void test_vector() -{ - std::vector int_vector; - std::vector::const_iterator it; - - int_vector.push_back(1); - int_vector.push_back(2); - assert(int_vector.front()==1); - assert(int_vector.back()==2); - assert(*int_vector.begin()==1); - it=int_vector.begin(); - assert(*it==1); - - int_vector.pop_back(); - int_vector.pop_back(); - assert(int_vector.empty()); -} - -void test_list() -{ - std::list int_list; - - int_list.push_back(1); - int_list.push_back(2); - assert(int_list.front()==1); - assert(int_list.back()==2); - assert(*int_list.begin()==1); - - int_list.pop_back(); - int_list.pop_back(); - assert(int_list.empty()); -} - -void test_set() -{ -} - -int nondet_int(); - -int main() -{ - switch(nondet_int()) - { - case 0: test_vector(); break; - case 1: test_list(); break; - case 2: test_set(); break; - - default:; - } -} diff --git a/regression/cpp-from-CVS/STL2/main.cpp b/regression/cpp-from-CVS/STL2/main.cpp deleted file mode 100644 index e382495df27..00000000000 --- a/regression/cpp-from-CVS/STL2/main.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include - -bool nondet_bool(); -int nondet_int(); - -using namespace std; - -int main() -{ - vector v; - - while(nondet_bool()) - v.push_back(nondet_int()); - - vector::iterator it; - - for(it = v.begin(); it != v.end(); it++) - if(*it == 10) v.erase(it); -} diff --git a/regression/cpp-from-CVS/Static_Member1/main.cpp b/regression/cpp-from-CVS/Static_Member1/main.cpp deleted file mode 100644 index 782d57862d7..00000000000 --- a/regression/cpp-from-CVS/Static_Member1/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -class B -{ -public: - static int A1; - static int A2; - static const int A3=20; - - // the const ones are good as array size - int table[A3]; -}; - -int B::A1=1; -int B::A2; - -int main() -{ - assert(B::A1==1); - assert(B::A2==0); // zero initializer - assert(B::A3==20); // in-class initializer -} diff --git a/regression/cpp-from-CVS/Static_Member1/test.desc b/regression/cpp-from-CVS/Static_Member1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Static_Member1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Static_Member_Function/main.cpp b/regression/cpp-from-CVS/Static_Member_Function/main.cpp deleted file mode 100644 index d1334bb750d..00000000000 --- a/regression/cpp-from-CVS/Static_Member_Function/main.cpp +++ /dev/null @@ -1,28 +0,0 @@ -// call from outside class - -class t -{ -public: - int i; - static void f() { } -}; - -int main() -{ - t::f(); -} - -// call from inside class - -class A -{ - static void g(); - static void g(int i); - - void f(); -}; - -void A::f() -{ - g(); -} diff --git a/regression/cpp-from-CVS/Static_Member_Function/test.desc b/regression/cpp-from-CVS/Static_Member_Function/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Static_Member_Function/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Static_Method1/main.cpp b/regression/cpp-from-CVS/Static_Method1/main.cpp deleted file mode 100644 index 630ef1979ee..00000000000 --- a/regression/cpp-from-CVS/Static_Method1/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ -struct A -{ - static int Value(int v) {return v;} - static int Value(int v1, int v2){return 1;} -}; - -int main() -{ - A a; - assert(a.Value(0) == 0); -} diff --git a/regression/cpp-from-CVS/Static_Method1/test.desc b/regression/cpp-from-CVS/Static_Method1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Static_Method1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/String_Literal1/main.cpp b/regression/cpp-from-CVS/String_Literal1/main.cpp deleted file mode 100644 index be5b566b2dc..00000000000 --- a/regression/cpp-from-CVS/String_Literal1/main.cpp +++ /dev/null @@ -1,5 +0,0 @@ -int main() -{ - const char *p="asd" "1"; - assert(p[3]=='1'); -} diff --git a/regression/cpp-from-CVS/String_Literal1/test.desc b/regression/cpp-from-CVS/String_Literal1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/String_Literal1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates1/main.cpp b/regression/cpp-from-CVS/Templates1/main.cpp deleted file mode 100644 index 786f132d643..00000000000 --- a/regression/cpp-from-CVS/Templates1/main.cpp +++ /dev/null @@ -1,17 +0,0 @@ -template -void f(T x) -{ - assert(x); -} - -template -void eq(int z) -{ - assert(i==z); -} - -int main() -{ - eq<2>(2); - f(1); -} diff --git a/regression/cpp-from-CVS/Templates1/test.desc b/regression/cpp-from-CVS/Templates1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates10/main.cpp b/regression/cpp-from-CVS/Templates10/main.cpp deleted file mode 100644 index 663719a98f0..00000000000 --- a/regression/cpp-from-CVS/Templates10/main.cpp +++ /dev/null @@ -1,24 +0,0 @@ -template -int func() -{ - return 0; -} - -template <> -int func() -{ - return 1; -} - -template <> -int func() -{ - return 2; -} - -int main() -{ - assert(func() == 0); - assert(func() == 1); - assert(func() == 2); -} diff --git a/regression/cpp-from-CVS/Templates10/test.desc b/regression/cpp-from-CVS/Templates10/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates10/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates11/main.cpp b/regression/cpp-from-CVS/Templates11/main.cpp deleted file mode 100644 index a4009d36437..00000000000 --- a/regression/cpp-from-CVS/Templates11/main.cpp +++ /dev/null @@ -1,22 +0,0 @@ -template -bool func(T t) {return false;} - - -template <> -bool func(int t) {return true;} - -template -struct Test -{ - bool f() - { - A a; - return func(a); - } -}; - -int main() -{ - Test t1; - assert(t1.f()==true); -} diff --git a/regression/cpp-from-CVS/Templates11/test.desc b/regression/cpp-from-CVS/Templates11/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates11/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates12/main.cpp b/regression/cpp-from-CVS/Templates12/main.cpp deleted file mode 100644 index bf80fe75e48..00000000000 --- a/regression/cpp-from-CVS/Templates12/main.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include - -template -struct A -{ - T t; - bool eq(const A& ref) const - { - return ref.t == t; - } -}; - -int main() -{ - A a; - a.t = 10; - assert(a.eq(a)); -} diff --git a/regression/cpp-from-CVS/Templates12/test.desc b/regression/cpp-from-CVS/Templates12/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates12/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates13/main.cpp b/regression/cpp-from-CVS/Templates13/main.cpp deleted file mode 100644 index ec872c10100..00000000000 --- a/regression/cpp-from-CVS/Templates13/main.cpp +++ /dev/null @@ -1,16 +0,0 @@ -template - -bool func() { - return func(); -} - -template <> -bool func() -{ - return true; -} - -int main() -{ - assert(func()); -} diff --git a/regression/cpp-from-CVS/Templates13/test.desc b/regression/cpp-from-CVS/Templates13/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates13/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates14/main.cpp b/regression/cpp-from-CVS/Templates14/main.cpp deleted file mode 100644 index 05ee58aef23..00000000000 --- a/regression/cpp-from-CVS/Templates14/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ - -namespace n1 -{ - template - struct A{ - S a; - }; -} - -template -struct B{ - n1::A b; -}; - -int main() -{ - B o; - o.b.a = true; - assert(o.b.a==true); -}; diff --git a/regression/cpp-from-CVS/Templates14/test.desc b/regression/cpp-from-CVS/Templates14/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates14/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates15/main.cpp b/regression/cpp-from-CVS/Templates15/main.cpp deleted file mode 100644 index 6e925db41b7..00000000000 --- a/regression/cpp-from-CVS/Templates15/main.cpp +++ /dev/null @@ -1,7 +0,0 @@ -template -struct A { - int a; -}; - -template -struct A; diff --git a/regression/cpp-from-CVS/Templates16/main.cpp b/regression/cpp-from-CVS/Templates16/main.cpp deleted file mode 100644 index c00b87198da..00000000000 --- a/regression/cpp-from-CVS/Templates16/main.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include - -template -struct A -{ - T t; -}; - -struct B -{ - int i; - B():i(0) { } -}; - -int main() -{ - A a; - assert(a.t.i == 0); -} diff --git a/regression/cpp-from-CVS/Templates17/main.cpp b/regression/cpp-from-CVS/Templates17/main.cpp deleted file mode 100644 index 7a537e5f5c0..00000000000 --- a/regression/cpp-from-CVS/Templates17/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ - -template -struct A -{ - bool b; - A(){} -}; - -template <> -struct A; - -template <> -struct A{bool b;}; - - -int main() -{ - A a; - a.b = false; -} diff --git a/regression/cpp-from-CVS/Templates17/test.desc b/regression/cpp-from-CVS/Templates17/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates17/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates18/main.cpp b/regression/cpp-from-CVS/Templates18/main.cpp deleted file mode 100644 index 71520e99e0a..00000000000 --- a/regression/cpp-from-CVS/Templates18/main.cpp +++ /dev/null @@ -1,24 +0,0 @@ -template -struct A; - -template -struct A -{ - A(){} -}; - - - -template <> -struct A -{ - int b; - A(){} -}; - - -int main() -{ - A a; - a.b = false; -} diff --git a/regression/cpp-from-CVS/Templates18/test.desc b/regression/cpp-from-CVS/Templates18/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates18/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates19/main.cpp b/regression/cpp-from-CVS/Templates19/main.cpp deleted file mode 100644 index 1c608e1c39c..00000000000 --- a/regression/cpp-from-CVS/Templates19/main.cpp +++ /dev/null @@ -1,22 +0,0 @@ -template -struct A -{ - T i; -}; - - -template -T get_i(const A a1) -{ - return a1.i; -} - - -int main() -{ - A a2; - a2.i = 10; - assert (a2.i == 10); - assert(get_i(a2) == 10); - get_i(a2); -} diff --git a/regression/cpp-from-CVS/Templates19/test.desc b/regression/cpp-from-CVS/Templates19/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates19/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates20/main.cpp b/regression/cpp-from-CVS/Templates20/main.cpp deleted file mode 100644 index cfef1b4ae8c..00000000000 --- a/regression/cpp-from-CVS/Templates20/main.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include - -struct A -{ - int i; - A():i(10) {} - - private: - A(const A& a); // disabled -}; - -template -class B: A { - public: - T t; - B(){}; - int get_i() {return i;} - private: - B(B& b); // disabled -}; - - -template <> -class B: A { - public: - bool b; - B():b(true) {} - int get_i() {return i;} - private: - B(B& b); // disabled -}; - - -B b1; -int main() -{ - assert(b1.t == 0); - B b2; - assert(b2.b == true); -} diff --git a/regression/cpp-from-CVS/Templates21/main.cpp b/regression/cpp-from-CVS/Templates21/main.cpp deleted file mode 100644 index ceef7e83d5a..00000000000 --- a/regression/cpp-from-CVS/Templates21/main.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include - -template -struct A{ - T i; - void write(T i){this->i = i;} -}; - -struct B: A -{ - void write(bool i) - { - A::write(i); - } -}; - -int main() -{ - B b; - b.write(true); - assert(b.i == true); -} diff --git a/regression/cpp-from-CVS/Templates21/test.desc b/regression/cpp-from-CVS/Templates21/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates21/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates22/main.cpp b/regression/cpp-from-CVS/Templates22/main.cpp deleted file mode 100644 index 49a57fbd5fe..00000000000 --- a/regression/cpp-from-CVS/Templates22/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ -template -T func(T* t) {return *t;} - -template -T func(T t) { return t;} - -int main() -{ - int x = 10; - assert(func(&x) == func(x)); -} diff --git a/regression/cpp-from-CVS/Templates22/test.desc b/regression/cpp-from-CVS/Templates22/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates22/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates23/main.cpp b/regression/cpp-from-CVS/Templates23/main.cpp deleted file mode 100644 index 3392ace01ce..00000000000 --- a/regression/cpp-from-CVS/Templates23/main.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include - -template -struct A -{ - static const unsigned n = N; -}; - -template -struct B -{ - A<0+N> a; -}; - -int main() -{ - B<10> b; - assert(b.a.n == 10); -} diff --git a/regression/cpp-from-CVS/Templates23/test.desc b/regression/cpp-from-CVS/Templates23/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates23/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates24/main.cpp b/regression/cpp-from-CVS/Templates24/main.cpp deleted file mode 100644 index d0c9fd409a1..00000000000 --- a/regression/cpp-from-CVS/Templates24/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include - -template -struct A { - bool True(); -}; - -template -bool A::True() { return true; } - -int main() -{ - A a; - assert(a.True() == true); -} diff --git a/regression/cpp-from-CVS/Templates24/test.desc b/regression/cpp-from-CVS/Templates24/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates24/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates25/main.cpp b/regression/cpp-from-CVS/Templates25/main.cpp deleted file mode 100644 index 205eaeb8be7..00000000000 --- a/regression/cpp-from-CVS/Templates25/main.cpp +++ /dev/null @@ -1,7 +0,0 @@ -template -bool True() {return true;} - -int main() -{ - assert(True()==true); -} diff --git a/regression/cpp-from-CVS/Templates25/test.desc b/regression/cpp-from-CVS/Templates25/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates25/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates26/main.cpp b/regression/cpp-from-CVS/Templates26/main.cpp deleted file mode 100644 index 5c1dd330770..00000000000 --- a/regression/cpp-from-CVS/Templates26/main.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include - -template -struct A{ - int func(); -}; - -template -int A::func() -{ - return C; -} - -int main() -{ - A<12> a; - assert(a.func() == 12); -} diff --git a/regression/cpp-from-CVS/Templates26/test.desc b/regression/cpp-from-CVS/Templates26/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates26/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates27/main.cpp b/regression/cpp-from-CVS/Templates27/main.cpp deleted file mode 100644 index e2edda31d08..00000000000 --- a/regression/cpp-from-CVS/Templates27/main.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include - -template -struct C { - T2 i; - C():i(10) { } -}; - -template -void check9() -{ - assert(v == 9); -} - -template -void check10() -{ - assert(v == 10); -} - -int main() -{ - C c; - assert(c.i == 10); - - check9(); - check10<>(); -} diff --git a/regression/cpp-from-CVS/Templates28/main.cpp b/regression/cpp-from-CVS/Templates28/main.cpp deleted file mode 100644 index ec4c4b48074..00000000000 --- a/regression/cpp-from-CVS/Templates28/main.cpp +++ /dev/null @@ -1,18 +0,0 @@ - -template -struct A -{ - int func(){return c1;} -}; - -template -struct B -{ - A a; -}; - -int main() -{ - B<5, 4> b; - assert(b.a.func() == 14); -} diff --git a/regression/cpp-from-CVS/Templates28/test.desc b/regression/cpp-from-CVS/Templates28/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates28/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates29/main.cpp b/regression/cpp-from-CVS/Templates29/main.cpp deleted file mode 100644 index a79184a3292..00000000000 --- a/regression/cpp-from-CVS/Templates29/main.cpp +++ /dev/null @@ -1,21 +0,0 @@ -namespace N { -template -struct A -{ - T i; - A(T i):i(i){} -}; -} - -struct B : N::A -{ - B(int i): N::A(i) {} - void func() {} - int b; -}; - -int main() -{ - B b(10); - assert(b.i == 10); -} diff --git a/regression/cpp-from-CVS/Templates3/main.cpp b/regression/cpp-from-CVS/Templates3/main.cpp deleted file mode 100644 index 4ce1d69707e..00000000000 --- a/regression/cpp-from-CVS/Templates3/main.cpp +++ /dev/null @@ -1,18 +0,0 @@ -template -class int_array -{ -public: - int array[size]; - - int read(unsigned int x) - { - assert(x a; - a.read(2); -} diff --git a/regression/cpp-from-CVS/Templates3/test.desc b/regression/cpp-from-CVS/Templates3/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates3/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates30/main.cpp b/regression/cpp-from-CVS/Templates30/main.cpp deleted file mode 100644 index fba925e76c6..00000000000 --- a/regression/cpp-from-CVS/Templates30/main.cpp +++ /dev/null @@ -1,16 +0,0 @@ -template -struct A -{ - T1 t; - - template - void set(T2 t){ this->t = t; } - -}; - -int main() -{ - A a; - a.set(0); - assert(a.t == false); -}; diff --git a/regression/cpp-from-CVS/Templates30/test.desc b/regression/cpp-from-CVS/Templates30/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates30/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates31/main.cpp b/regression/cpp-from-CVS/Templates31/main.cpp deleted file mode 100644 index 8032d62c7ab..00000000000 --- a/regression/cpp-from-CVS/Templates31/main.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include - -template -struct C -{ - static const char* k; -}; - -template -const char* C::k = "C"; - -int main(int argc, char* argv[]) -{ - assert(C::k[0] == 'C'); - assert(C::k[0] == 'C'); - assert(&C::k != &C::k); - return 0; -} diff --git a/regression/cpp-from-CVS/Templates32/main.cpp b/regression/cpp-from-CVS/Templates32/main.cpp deleted file mode 100644 index fcbf2fc3a51..00000000000 --- a/regression/cpp-from-CVS/Templates32/main.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include - -enum argt { ONE, TWO }; - -template < argt V = TWO, class T = argt > -class A -{ - public: - A():v(V) {} - T v; -}; - -int main() -{ - A<> a; - assert (a.v == TWO); - return 0; -} diff --git a/regression/cpp-from-CVS/Templates33/main.cpp b/regression/cpp-from-CVS/Templates33/main.cpp deleted file mode 100644 index cde6ee9363a..00000000000 --- a/regression/cpp-from-CVS/Templates33/main.cpp +++ /dev/null @@ -1,13 +0,0 @@ -template -class X -{ -public: - typename T::asd asd; -}; - -// this won't fail! -typedef X Z; - -int main() -{ -} diff --git a/regression/cpp-from-CVS/Templates33/test.desc b/regression/cpp-from-CVS/Templates33/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates33/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates34/main.cpp b/regression/cpp-from-CVS/Templates34/main.cpp deleted file mode 100644 index 9d3a5092dfc..00000000000 --- a/regression/cpp-from-CVS/Templates34/main.cpp +++ /dev/null @@ -1,25 +0,0 @@ -// tag only, but with default parameter -template -class my_template1; - -// body, but without default parameter -template -class my_template1 -{ -}; - -// should work! -my_template1 some_instance1; - -// tag only, no default parameter -template -class my_template2; - -// body, but without default parameter -template -class my_template2 -{ -}; - -// should work! -my_template2 some_instance2; diff --git a/regression/cpp-from-CVS/Templates35/main.cpp b/regression/cpp-from-CVS/Templates35/main.cpp deleted file mode 100644 index 4a8d353a501..00000000000 --- a/regression/cpp-from-CVS/Templates35/main.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include - -template -class X -{ -public: - // the :: should trigger elaboration of Z - enum { e = T::e }; -}; - -template -class Y:public X -{ -public: - enum { e = X::e } ; -}; - -template -class Z -{ -public: - enum { e = 1 }; -}; - -Y > y; - -int main() -{ - assert(y.e==1); -} diff --git a/regression/cpp-from-CVS/Templates35/test.desc b/regression/cpp-from-CVS/Templates35/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates35/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates4/main.cpp b/regression/cpp-from-CVS/Templates4/main.cpp deleted file mode 100644 index a68a532ad2e..00000000000 --- a/regression/cpp-from-CVS/Templates4/main.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include - -class T1 -{ -public: - // a template member function - template - T2 f(T2 x) - { - t=true; - return x; - } - - void g() - { - assert(2==f(2)); - } - - void h() - { - assert(3==f(3)); - } - - - bool t; - T1():t(false) { } -}; - -int main() -{ - T1 x; - - x.g(); - assert(1==x.f(1)); - assert(true==x.f(true)); - assert(x.t==true); - x.h(); -} diff --git a/regression/cpp-from-CVS/Templates5/main.cpp b/regression/cpp-from-CVS/Templates5/main.cpp deleted file mode 100644 index 4b2178ac1d4..00000000000 --- a/regression/cpp-from-CVS/Templates5/main.cpp +++ /dev/null @@ -1,19 +0,0 @@ -template class Y { -public: - void f() { - T::A++; // T::A is not a type name! - } -}; - -class B -{ - public: - static int A; -}; - -int B::A = 0; -int main() { - Y y; - y.f(); - assert(B::A == 1); -} diff --git a/regression/cpp-from-CVS/Templates5/test.desc b/regression/cpp-from-CVS/Templates5/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates5/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates6/main.cpp b/regression/cpp-from-CVS/Templates6/main.cpp deleted file mode 100644 index 48169e50a7f..00000000000 --- a/regression/cpp-from-CVS/Templates6/main.cpp +++ /dev/null @@ -1,42 +0,0 @@ -#include - -int g; - -template -struct A -{ - T t; - ~A() { g++; } -}; - -struct B -{ - B() { g=10; } - ~B() { g=20; } -}; - -struct C -{ - A a; -}; - -struct D: A -{ -}; - -int main() -{ - { - C c; - assert(g==10); - } - - assert(g==20); - - { - D d; - assert(g==10); - } - - assert(g==20); -} diff --git a/regression/cpp-from-CVS/Templates8/main.cpp b/regression/cpp-from-CVS/Templates8/main.cpp deleted file mode 100644 index 69d92bb3a45..00000000000 --- a/regression/cpp-from-CVS/Templates8/main.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include - -template -struct A -{ - static T some_function(T v) { return v; } -}; - -int main() -{ - int v = A::some_function(10); - assert(v==10); -} diff --git a/regression/cpp-from-CVS/Templates8/test.desc b/regression/cpp-from-CVS/Templates8/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Templates8/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Templates9/main.cpp b/regression/cpp-from-CVS/Templates9/main.cpp deleted file mode 100644 index 8fd52766b70..00000000000 --- a/regression/cpp-from-CVS/Templates9/main.cpp +++ /dev/null @@ -1,48 +0,0 @@ -#include - -template -struct A { - static const int a = 0; -}; - -// specialization to int -template <> -struct A { - static const int a = 1; -}; - -// specialization to char -template <> -struct A { - static const int a = 2; -}; - -// specialization to signed char -template <> -struct A { - static const int a = 3; -}; - -// specialization to unsigned char -template <> -struct A { - static const int a = 4; -}; - -int main() -{ - A obj0; // general one - assert(obj0.a == 0); - - A obj1; // specialized - assert(obj1.a == 1); - - A obj2; // specialized - assert(obj2.a == 2); - - A obj3; // specialized - assert(obj3.a == 3); - - A obj4; // specialized - assert(obj4.a == 4); -} diff --git a/regression/cpp-from-CVS/Temporary1/main.cpp b/regression/cpp-from-CVS/Temporary1/main.cpp deleted file mode 100644 index 62514af90eb..00000000000 --- a/regression/cpp-from-CVS/Temporary1/main.cpp +++ /dev/null @@ -1,9 +0,0 @@ -int f(const int &i) -{ - assert(i==1); -} - -int main() -{ - f(1); -} diff --git a/regression/cpp-from-CVS/Temporary2/main.cpp b/regression/cpp-from-CVS/Temporary2/main.cpp deleted file mode 100644 index ffeee9869c9..00000000000 --- a/regression/cpp-from-CVS/Temporary2/main.cpp +++ /dev/null @@ -1,25 +0,0 @@ -class X -{ -public: - X() - { - } - - X(int i):z(i) - { - } - - int z; -}; - -void doit() -{ - X x; - - x=X(1); -} - -int main() -{ - doit(); -} diff --git a/regression/cpp-from-CVS/Typecast1/main.cpp b/regression/cpp-from-CVS/Typecast1/main.cpp deleted file mode 100644 index f510200b81e..00000000000 --- a/regression/cpp-from-CVS/Typecast1/main.cpp +++ /dev/null @@ -1,6 +0,0 @@ -int main() -{ - const int *p; - - p=(int *)0; -} diff --git a/regression/cpp-from-CVS/Typecast1/test.desc b/regression/cpp-from-CVS/Typecast1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Typecast1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Typecast2/main.cpp b/regression/cpp-from-CVS/Typecast2/main.cpp deleted file mode 100644 index 8a7da0a44f6..00000000000 --- a/regression/cpp-from-CVS/Typecast2/main.cpp +++ /dev/null @@ -1,21 +0,0 @@ -struct myA -{ - int i; -}; - -struct myB: myA -{ - int j; -}; - -int main() -{ - myA a; - myB b; - - b.j = 11; - *(myA *)(&b) = a; - - assert(b.j == 11); - assert(b.i == a.i); -} diff --git a/regression/cpp-from-CVS/Typedef1/main.cpp b/regression/cpp-from-CVS/Typedef1/main.cpp deleted file mode 100644 index b273f0029d7..00000000000 --- a/regression/cpp-from-CVS/Typedef1/main.cpp +++ /dev/null @@ -1,17 +0,0 @@ -struct A { - int i; - A(int i):i(i){} -}; - -class B: public A -{ - public: - typedef A _A; - B():_A(0){} -}; - -int main() -{ - B b; - assert(b.i==0); -} diff --git a/regression/cpp-from-CVS/Typedef1/test.desc b/regression/cpp-from-CVS/Typedef1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Typedef1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Typedef2/main.cpp b/regression/cpp-from-CVS/Typedef2/main.cpp deleted file mode 100644 index dd83b1ef5f2..00000000000 --- a/regression/cpp-from-CVS/Typedef2/main.cpp +++ /dev/null @@ -1,27 +0,0 @@ -struct A -{ - int i; -}; - -struct B: A -{ - typedef A _A; - int i; - void set(int i) - { - _A::i = i; - } - int get() - { - return _A::i; - } -}; - -int main() -{ - B b; - b.i = 0; - b.set(3); - assert(b.i==0); - assert(b.get()== 3); -} diff --git a/regression/cpp-from-CVS/Typedef2/test.desc b/regression/cpp-from-CVS/Typedef2/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Typedef2/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Typedef3/main.cpp b/regression/cpp-from-CVS/Typedef3/main.cpp deleted file mode 100644 index 4e447e886cf..00000000000 --- a/regression/cpp-from-CVS/Typedef3/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ - -struct B -{ - typedef struct { typedef int INT; } A; -}; - -int main() -{ - B::A::INT i = 1; - assert(i == 1); -} diff --git a/regression/cpp-from-CVS/Typedef3/test.desc b/regression/cpp-from-CVS/Typedef3/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Typedef3/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/Vector1/main.cpp b/regression/cpp-from-CVS/Vector1/main.cpp deleted file mode 100644 index d8a07707392..00000000000 --- a/regression/cpp-from-CVS/Vector1/main.cpp +++ /dev/null @@ -1,51 +0,0 @@ -#include -using namespace std; - -/* -void sort(vector& c) -{ - if (c.begin() == c.end()) return; - - for(int i=0; i < c.size(); i++) - { - for(vector::iterator it = c.begin(); - it < c.end() ; - it++) - { - vector::iterator it_inc = it; - it_inc++; - - if(it_inc == c.end()) - break; - - if(it_inc < it) - { - vector::value_type tmp = * it; - *it = *it_inc; - *it_inc = tmp; - } - } - } -} -*/ -int main() -{ - vector vec; - vec.resize(0); - __CPROVER_assert(vec.size()==0, "vec size == 0"); -/* vec.push_back(2); - vec.push_back(1); - vec.push_back(4); - - sort(vec); - - for(vector::iterator it = vec.begin(); it < vec.end(); it++) - { - vector::iterator it_inc = it; - it_inc++; - - if(it_inc == vec.end()) break; - __CPROVER_assert(*it <= *it_inc, "sorting error"); - } -*/ -} diff --git a/regression/cpp-from-CVS/Zero_Initializer1/main.cpp b/regression/cpp-from-CVS/Zero_Initializer1/main.cpp deleted file mode 100644 index f0c08a8babf..00000000000 --- a/regression/cpp-from-CVS/Zero_Initializer1/main.cpp +++ /dev/null @@ -1,24 +0,0 @@ -int g; -int **p; - -struct -{ - int m; -} s; - -struct B { - static int x; -}; - -int B::x; - -char a[10]; - -int main() -{ - assert(g==0); - assert(p==0); - assert(s.m==0); - assert(a[3]==0); - assert(B::x==0); -} diff --git a/regression/cpp-from-CVS/Zero_Initializer1/test.desc b/regression/cpp-from-CVS/Zero_Initializer1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/Zero_Initializer1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/argv1/main.cpp b/regression/cpp-from-CVS/argv1/main.cpp deleted file mode 100644 index 50005130da9..00000000000 --- a/regression/cpp-from-CVS/argv1/main.cpp +++ /dev/null @@ -1,9 +0,0 @@ -int main(int argc, char **argv) { - char *x; - - // there must be at least one - x=argv[0]; - - // last one must be NULL - assert(argv[argc]==0); -} diff --git a/regression/cpp-from-CVS/argv1/test.desc b/regression/cpp-from-CVS/argv1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/argv1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/const_cast1/main.cpp b/regression/cpp-from-CVS/const_cast1/main.cpp deleted file mode 100644 index a9c87d2d255..00000000000 --- a/regression/cpp-from-CVS/const_cast1/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ -int main() -{ - int i = 10; - const int& ri = i; - const_cast(ri) = 11; - assert(i == 11); - - const int* pi = &i; - *const_cast(pi) = 12; - assert(i==12); -} diff --git a/regression/cpp-from-CVS/const_cast1/test.desc b/regression/cpp-from-CVS/const_cast1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/const_cast1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/extractbits1/main.cpp b/regression/cpp-from-CVS/extractbits1/main.cpp deleted file mode 100644 index f38e3d0247b..00000000000 --- a/regression/cpp-from-CVS/extractbits1/main.cpp +++ /dev/null @@ -1,17 +0,0 @@ -// Note: systemc builtin extension -// require the cpp frontend to be compiled with the CPP_SYSTEMC_EXTENSION flag -int main() -{ - unsigned a = 6; - unsigned b = 12; - unsigned a21 = a.range(2, 1); - unsigned b32 = b.range(3, 2); - assert( a21 == b32); - - a.range(4, 3) = a.range(2, 1); - assert( a.range(4, 3) == b.range(3, 2)); - - a[0] = b.range(3, 3); - bool a0 = a[0]; - assert(a0 == true); -} diff --git a/regression/cpp-from-CVS/for1/main.cpp b/regression/cpp-from-CVS/for1/main.cpp deleted file mode 100644 index fceefb1d29a..00000000000 --- a/regression/cpp-from-CVS/for1/main.cpp +++ /dev/null @@ -1,9 +0,0 @@ -int main() -{ - int i; - for(i=0; i<10; i++) - { - assert(i<10); - } - -} diff --git a/regression/cpp-from-CVS/for1/test.desc b/regression/cpp-from-CVS/for1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/for1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/initialization1/main.cpp b/regression/cpp-from-CVS/initialization1/main.cpp deleted file mode 100644 index ae1152193e3..00000000000 --- a/regression/cpp-from-CVS/initialization1/main.cpp +++ /dev/null @@ -1,24 +0,0 @@ -int g1; - -class One -{ - public: - int o; - One():o(1){} -}; - -class A -{ - public: - static One one; - A() { assert(one.o == 1); } -}; - -One A::one; - -int main() -{ - assert(g1==0); - - A a; -} diff --git a/regression/cpp-from-CVS/initialization1/test.desc b/regression/cpp-from-CVS/initialization1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/initialization1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/initialization2/main.cpp b/regression/cpp-from-CVS/initialization2/main.cpp deleted file mode 100644 index 32f8ef37077..00000000000 --- a/regression/cpp-from-CVS/initialization2/main.cpp +++ /dev/null @@ -1,18 +0,0 @@ -class A -{ - public: - int a; - int b; - A(const A& r) {b =~r.b;} - A(){}; -}; - -A a1; -A a2 = a1; -int main() -{ - assert(a1.a==0); - assert(a2.a==0); - assert(a1.b==0); - assert(a2.b==~0); -}; diff --git a/regression/cpp-from-CVS/initialization3/main.cpp b/regression/cpp-from-CVS/initialization3/main.cpp deleted file mode 100644 index 49fa931c550..00000000000 --- a/regression/cpp-from-CVS/initialization3/main.cpp +++ /dev/null @@ -1,12 +0,0 @@ -class A -{ - public: - int i; - A(){} -}; - -int main() -{ - A a; - assert(a.i==0); -} diff --git a/regression/cpp-from-CVS/initialization3/test.desc b/regression/cpp-from-CVS/initialization3/test.desc deleted file mode 100644 index e778f120e58..00000000000 --- a/regression/cpp-from-CVS/initialization3/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=10$ -^SIGNAL=0$ -^VERIFICATION FAILED$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/initialization4/main.cpp b/regression/cpp-from-CVS/initialization4/main.cpp deleted file mode 100644 index 6edc3266d8f..00000000000 --- a/regression/cpp-from-CVS/initialization4/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -int g; - -int gen() -{ - return g++; -} - -const int b = gen(); -const int a = gen(); - -int main() -{ - assert(a==1); - assert(b==0); -} diff --git a/regression/cpp-from-CVS/initialization5/main.cpp b/regression/cpp-from-CVS/initialization5/main.cpp deleted file mode 100644 index f96693bcda3..00000000000 --- a/regression/cpp-from-CVS/initialization5/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ -int a[__CPROVER::constant_infinity_uint]; - -struct A { - int i[__CPROVER::constant_infinity_uint]; -}; - -A o; - -int main() -{ - unsigned x; - assert(o.i[x] == 0); - assert(a[x] == 0); -} diff --git a/regression/cpp-from-CVS/initialization5/test.desc b/regression/cpp-from-CVS/initialization5/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/initialization5/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/initialization6/main.cpp b/regression/cpp-from-CVS/initialization6/main.cpp deleted file mode 100644 index a53fcd3d06b..00000000000 --- a/regression/cpp-from-CVS/initialization6/main.cpp +++ /dev/null @@ -1,6 +0,0 @@ -extern "C" int g; - -int main() -{ - assert(g==0); -} diff --git a/regression/cpp-from-CVS/namespace1/main.cpp b/regression/cpp-from-CVS/namespace1/main.cpp deleted file mode 100644 index ec80f03b257..00000000000 --- a/regression/cpp-from-CVS/namespace1/main.cpp +++ /dev/null @@ -1,29 +0,0 @@ - -namespace test_space { - -int i; -} - -int test_space::j; - -void f() -{ - ::test_space::i=0; -} - -namespace test_space { - void g() - { - i=1; - j=2; - } -} - -using namespace test_space; - -int main() -{ - f(); - j=1; - assert(i==0); -} diff --git a/regression/cpp-from-CVS/namespace1/test.desc b/regression/cpp-from-CVS/namespace1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/namespace1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/namespace2/main.cpp b/regression/cpp-from-CVS/namespace2/main.cpp deleted file mode 100644 index 0c4afaa17cc..00000000000 --- a/regression/cpp-from-CVS/namespace2/main.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include - -namespace N -{ - template - struct A - { - T t; - A(T t):t(t) { } - }; -} - -using N::A; - -int main() -{ - A a(true); - assert(a.t == true); -} diff --git a/regression/cpp-from-CVS/namespace3/main.cpp b/regression/cpp-from-CVS/namespace3/main.cpp deleted file mode 100644 index 1510725fb37..00000000000 --- a/regression/cpp-from-CVS/namespace3/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ -namespace std -{ - struct A {int i; }; -} - -std::A a; - -int main(int argc, char* argv[]) -{ - assert(a.i == 0); -} diff --git a/regression/cpp-from-CVS/namespace3/test.desc b/regression/cpp-from-CVS/namespace3/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/namespace3/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/new1/main.cpp b/regression/cpp-from-CVS/new1/main.cpp deleted file mode 100644 index e0c73bb2a2a..00000000000 --- a/regression/cpp-from-CVS/new1/main.cpp +++ /dev/null @@ -1,29 +0,0 @@ -void single_object() -{ - int *p; - - p=new int(2); - - assert(*p==2); - - delete p; -} - -void array() -{ - int *q; - - q=new int[100]; - - q[50]=1; - - // _must_ use delete[] here - delete[] q; -} - -int main() -{ - single_object(); - array(); - return 0; -} diff --git a/regression/cpp-from-CVS/new1/test.desc b/regression/cpp-from-CVS/new1/test.desc deleted file mode 100644 index 261ae194d03..00000000000 --- a/regression/cpp-from-CVS/new1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp ---pointer-check -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/operators/main.cpp b/regression/cpp-from-CVS/operators/main.cpp deleted file mode 100644 index b19aa87829a..00000000000 --- a/regression/cpp-from-CVS/operators/main.cpp +++ /dev/null @@ -1,28 +0,0 @@ -class I -{ - int i; - public: - int get() {return i;} - void set(int i) {this->i=i;} - I& operator<<=(const I& ref) {i <<= ref.i; return *this;} - I& operator>>=(const I& ref) {i >>= ref.i; return *this;} - I& operator+=(const I& ref) {i += ref.i; return *this;} - I& operator-=(const I& ref){i -= ref.i; return *this;} -}; - -int main() -{ - I i1, i2; - i1.set(1); - i2.set(2); - i2+=i1; - assert(i2.get()==3); - i2-=i1; - assert(i2.get()==2); - i2 <<= i1; - assert(i2.get()==4); - i2 >>= i1; - assert(i2.get()==2); - i2 = i1; - assert(i2.get()== 1); -} diff --git a/regression/cpp-from-CVS/operators/test.desc b/regression/cpp-from-CVS/operators/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/operators/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/reinterpret_cast1/main.cpp b/regression/cpp-from-CVS/reinterpret_cast1/main.cpp deleted file mode 100644 index d27456e556c..00000000000 --- a/regression/cpp-from-CVS/reinterpret_cast1/main.cpp +++ /dev/null @@ -1,9 +0,0 @@ -int main() -{ - int v = 256; - int *i= &v; - char *c = reinterpret_cast(i); - *c == 0; - int *j = reinterpret_cast(c); - assert(j==i); -} diff --git a/regression/cpp-from-CVS/reinterpret_cast1/test.desc b/regression/cpp-from-CVS/reinterpret_cast1/test.desc deleted file mode 100644 index 5249662e6aa..00000000000 --- a/regression/cpp-from-CVS/reinterpret_cast1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp ---little-endian -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/reinterpret_cast2/main.cpp b/regression/cpp-from-CVS/reinterpret_cast2/main.cpp deleted file mode 100644 index c4a91859383..00000000000 --- a/regression/cpp-from-CVS/reinterpret_cast2/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -struct A { - int* pi; - -}; - -int main() -{ - A a; - const A* cpa = &a; - - int* ptr = reinterpret_cast(cpa->pi); - - return 0; - -} diff --git a/regression/cpp-from-CVS/reinterpret_cast2/test.desc b/regression/cpp-from-CVS/reinterpret_cast2/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/reinterpret_cast2/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/static_cast1/main.cpp b/regression/cpp-from-CVS/static_cast1/main.cpp deleted file mode 100644 index 0e06d85ac00..00000000000 --- a/regression/cpp-from-CVS/static_cast1/main.cpp +++ /dev/null @@ -1,9 +0,0 @@ -int main() -{ - // this is ok - double xd=2.3; - - int xi=static_cast(xd); - - assert(xi==2); -} diff --git a/regression/cpp-from-CVS/static_cast1/test.desc b/regression/cpp-from-CVS/static_cast1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/static_cast1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/static_cast2/test.desc b/regression/cpp-from-CVS/static_cast2/test.desc deleted file mode 100644 index 8022cf7f3a5..00000000000 --- a/regression/cpp-from-CVS/static_cast2/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=6$ -^SIGNAL=0$ -^CONVERSION ERROR$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/static_cast3/main.cpp b/regression/cpp-from-CVS/static_cast3/main.cpp deleted file mode 100644 index fdb99bbec65..00000000000 --- a/regression/cpp-from-CVS/static_cast3/main.cpp +++ /dev/null @@ -1,26 +0,0 @@ -struct A { - int i; -}; - -struct B { - char j; -}; - -struct C: A, B -{ - bool k; -}; - - -int main() -{ - C c; - c.k = true; - - B& b = c; - assert((static_cast(b)).k == true); - - B* pb = &c; - static_cast(pb)->k = false; - assert(c.k==false); -} diff --git a/regression/cpp-from-CVS/static_cast3/test.desc b/regression/cpp-from-CVS/static_cast3/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/static_cast3/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/static_cast4/main.cpp b/regression/cpp-from-CVS/static_cast4/main.cpp deleted file mode 100644 index 08ba6d6578c..00000000000 --- a/regression/cpp-from-CVS/static_cast4/main.cpp +++ /dev/null @@ -1,8 +0,0 @@ -struct A { int i;}; -struct B: A { char j;}; -int main() -{ - A a; - const A& ra = a; - static_cast(ra); // not ok -} diff --git a/regression/cpp-from-CVS/static_cast4/test.desc b/regression/cpp-from-CVS/static_cast4/test.desc deleted file mode 100644 index 8022cf7f3a5..00000000000 --- a/regression/cpp-from-CVS/static_cast4/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=6$ -^SIGNAL=0$ -^CONVERSION ERROR$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/static_cast5/main.cpp b/regression/cpp-from-CVS/static_cast5/main.cpp deleted file mode 100644 index e324d8604e8..00000000000 --- a/regression/cpp-from-CVS/static_cast5/main.cpp +++ /dev/null @@ -1,29 +0,0 @@ -struct A -{ - int i; -}; - -struct B: A -{ -}; - -int get_i1(A& a) -{ - return static_cast(&a)->i; -} - -int get_i2(A* pa) -{ - return static_cast(pa)->i; -} - -int main() -{ - B b; - b.i = 10; - int tmp1 = get_i1(b); - assert(tmp1 == 10); - - int tmp2 = get_i2(&b); - assert(tmp2 == 10); -} diff --git a/regression/cpp-from-CVS/static_cast5/test.desc b/regression/cpp-from-CVS/static_cast5/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/static_cast5/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/struct1/main.cpp b/regression/cpp-from-CVS/struct1/main.cpp deleted file mode 100644 index 780ee20fd4c..00000000000 --- a/regression/cpp-from-CVS/struct1/main.cpp +++ /dev/null @@ -1,39 +0,0 @@ -extern "C" typedef struct IUnknown IUnknown; - -// these are the same -struct IUnknown -{ - int asd; -}; - -int f(IUnknown *This); - -struct AA { - int i; -}; - -struct BBB { - struct asd *p; -} abc; - -struct AAA { - struct asd *q; -} fff; - -struct asd -{ - int z; -}; - -void f() -{ - abc.p=fff.q; -} - -int main() -{ - int z; - - z=sizeof(struct AA); - -} diff --git a/regression/cpp-from-CVS/struct1/test.desc b/regression/cpp-from-CVS/struct1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/struct1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/typecast_ambiguity3/main.cpp b/regression/cpp-from-CVS/typecast_ambiguity3/main.cpp deleted file mode 100644 index ad03e797cf4..00000000000 --- a/regression/cpp-from-CVS/typecast_ambiguity3/main.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include - -int main() -{ - int i; - - // this is to parse as (bool(i)) & 0x1fff - // and not as bool(i&0x1fff) - - assert(sizeof((bool)(i) & 0x1fff)==sizeof(int)); - - return 0; -} diff --git a/regression/cpp-from-CVS/typecast_ambiguity3/test.desc b/regression/cpp-from-CVS/typecast_ambiguity3/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/typecast_ambiguity3/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/typename1/main.cpp b/regression/cpp-from-CVS/typename1/main.cpp deleted file mode 100644 index fe91f31bbc6..00000000000 --- a/regression/cpp-from-CVS/typename1/main.cpp +++ /dev/null @@ -1,24 +0,0 @@ -class X -{ -public: - typedef int T; -}; - -template class Y -{ -public: - typename X::T g; - - void f() - { - typename X::T l; - - } -}; - -int main() -{ - Y o; - - o.g=1; -} diff --git a/regression/cpp-from-CVS/typename1/test.desc b/regression/cpp-from-CVS/typename1/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/typename1/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/typename2/main.cpp b/regression/cpp-from-CVS/typename2/main.cpp deleted file mode 100644 index 39dc405df5b..00000000000 --- a/regression/cpp-from-CVS/typename2/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -enum foo {NOT_AFFECTED, FATAL_AFFECT, WARNING}; - -typedef struct { - foo SeverityType; -} BitDatabaseRecordStruct; - -const BitDatabaseRecordStruct BitDataBase [1] = -{ - {NOT_AFFECTED} -}; - -int main() -{ - return 0; -} diff --git a/regression/cpp-from-CVS/typename2/test.desc b/regression/cpp-from-CVS/typename2/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/typename2/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/union1/main.cpp b/regression/cpp-from-CVS/union1/main.cpp deleted file mode 100644 index f112a5e8653..00000000000 --- a/regression/cpp-from-CVS/union1/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include - -int main() -{ - // anonymous union - union - { - int a; - char b; - }; - - a = 'z'; - assert(b == 'z'); -} diff --git a/regression/cpp-from-CVS/virtual1/main.cpp b/regression/cpp-from-CVS/virtual1/main.cpp deleted file mode 100644 index 540af426a25..00000000000 --- a/regression/cpp-from-CVS/virtual1/main.cpp +++ /dev/null @@ -1,48 +0,0 @@ -int g; - -class A -{ -public: - virtual void f() - { - g=1; - } - - int mA; - - A(); -}; - -A::A() -{ -} - -class B: public A -{ -public: - B() - { - mB=1; - } - - virtual void f() - { - g=2; - mB=3; - } - - int mB; -}; - -int main() -{ - B b; - A *p; - - p=&b; - - p->f(); - - assert(g==2); - assert(b.mB==3); -} diff --git a/regression/cpp-from-CVS/virtual10/main.cpp b/regression/cpp-from-CVS/virtual10/main.cpp deleted file mode 100644 index 43d5480fd12..00000000000 --- a/regression/cpp-from-CVS/virtual10/main.cpp +++ /dev/null @@ -1,13 +0,0 @@ -struct A -{ - virtual bool func() const {return true;} - virtual bool func() {return false;} -}; - -int main() -{ - const A a1; - assert(a1.func()== true); - A a2; - assert(a2.func()== false); -} diff --git a/regression/cpp-from-CVS/virtual10/test.desc b/regression/cpp-from-CVS/virtual10/test.desc deleted file mode 100644 index 7ed391809e9..00000000000 --- a/regression/cpp-from-CVS/virtual10/test.desc +++ /dev/null @@ -1,7 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- diff --git a/regression/cpp-from-CVS/virtual11/main.cpp b/regression/cpp-from-CVS/virtual11/main.cpp deleted file mode 100644 index 86d443c1d05..00000000000 --- a/regression/cpp-from-CVS/virtual11/main.cpp +++ /dev/null @@ -1,27 +0,0 @@ -struct A { - int i; - virtual operator int() const - { - return i; - } -}; - -struct B : A -{ - operator int() const - { - return i+1; - } -}; - -int get_i(const A& a) -{ - return a; -} - -int main() -{ - B b; - b.i = 10; - assert(get_i(b)==11); -} diff --git a/regression/cpp-from-CVS/virtual12/main.cpp b/regression/cpp-from-CVS/virtual12/main.cpp deleted file mode 100644 index 51c6053ef29..00000000000 --- a/regression/cpp-from-CVS/virtual12/main.cpp +++ /dev/null @@ -1,17 +0,0 @@ -struct A { - virtual int func(){return 1;} -}; - -struct B: A { - int func(){return 2;} -}; - -int call_func1(A a) {return a.func();} -int call_func2(A& a) {return a.func();} - -int main() -{ - B b; - assert(call_func1(b)==1); - assert(call_func2(b)==2); -} diff --git a/regression/cpp-from-CVS/virtual13/main.cpp b/regression/cpp-from-CVS/virtual13/main.cpp deleted file mode 100644 index ac89c2df9ee..00000000000 --- a/regression/cpp-from-CVS/virtual13/main.cpp +++ /dev/null @@ -1,12 +0,0 @@ -struct A { virtual int f(){ return 1; } }; -struct B { virtual int f(){ return 2;} }; -struct C: A, B { virtual int f(){ return 3;} }; - - -int main(int argc, char* argv[]) -{ - C c; - C c2(c); - assert(((A&)c2).f() == ((B&)c2).f()); - return 0; -} diff --git a/regression/cpp-from-CVS/virtual14/main.cpp b/regression/cpp-from-CVS/virtual14/main.cpp deleted file mode 100644 index 699a2459ab2..00000000000 --- a/regression/cpp-from-CVS/virtual14/main.cpp +++ /dev/null @@ -1,75 +0,0 @@ -struct T -{ - int x, y; -}; - -class A -{ - public: - int a; - virtual void f( T t1, T& t2) - { - t2.x = t1.x; - t2.y = t1.y; - } -}; - - -class B -{ - public: - int b; - - virtual void f(T t1, T& t2) - { - t2.x = t1.y; - t2.y = t1.x; - } -}; - -class C: public A , public B -{ -public: - virtual void f(T t1, T& t2) - { - t2.x = t1.x+1; - t2.y = t1.y+1; - } -}; - -int main(int argc, char* argv[]) -{ - A a; - B b; - C c; - T t1, t2; - - t1.x = 10; - t1.y = 20; - - a.f(t1, t2); - assert(t2.x == t1.x && t2.y == t1.y); - t2.x = t2.y = 0; - - b.f(t1, t2); - assert(t2.x == t1.y && t2.y == t1.x); - t2.x = t2.y = 0; - - c.f(t1, t2); - assert(t2.x == t1.x+1 && t2.y == t1.y+1); - t2.x = t2.y = 0; - - ((A*)&c)->f(t1, t2); - assert(t2.x == t1.x+1 && t2.y == t1.y+1); - t2.x = t2.y = 0; - - - c.b = 1; - assert(((B*)&c)->b == 1); - - ((B*)&c)->f(t1, t2); - assert(t2.x == t1.x+1 && t2.y == t1.y+1); - t2.x = t2.y = 0; - - return 0; -} diff --git a/regression/cpp-from-CVS/virtual15/main.cpp b/regression/cpp-from-CVS/virtual15/main.cpp deleted file mode 100644 index db02c2bdccf..00000000000 --- a/regression/cpp-from-CVS/virtual15/main.cpp +++ /dev/null @@ -1,36 +0,0 @@ -// #include -// #include -struct A -{ - virtual int f() {return 1;} - virtual int g(){return 1;} -}; - -struct B: A -{ - int f(){return 2;} -}; - -struct C: B -{ -}; - -struct D: C -{ - int g(){return 3;} -}; - - -int main() -{ - D d; - - assert(d.f() == 2); - assert(d.g() == 3); - assert(((C*)(&d))->f() == 2); - assert(((B*)(&d))->g() == 3); - assert(((B*)(&d))->f() == 2); - assert(((B*)(&d))->g() == 3); - assert(((A*)(&d))->f() == 2); - assert(((A*)(&d))->g() == 3); -} diff --git a/regression/cpp-from-CVS/virtual2/main.cpp b/regression/cpp-from-CVS/virtual2/main.cpp deleted file mode 100644 index 9ef8f7de453..00000000000 --- a/regression/cpp-from-CVS/virtual2/main.cpp +++ /dev/null @@ -1,28 +0,0 @@ -int g; - -class X -{ -public: - virtual int f(); - - int m; -}; - -int X::f() -{ - g=10; - m=1; -} - -class Y:public X -{ -}; - -int main() -{ - Y y; - - y.f(); - - assert(g==10); -} diff --git a/regression/cpp-from-CVS/virtual2/test.desc b/regression/cpp-from-CVS/virtual2/test.desc deleted file mode 100644 index 91d9cf8b52e..00000000000 --- a/regression/cpp-from-CVS/virtual2/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- -^warning: ignoring diff --git a/regression/cpp-from-CVS/virtual3/main.cpp b/regression/cpp-from-CVS/virtual3/main.cpp deleted file mode 100644 index f2ebce99677..00000000000 --- a/regression/cpp-from-CVS/virtual3/main.cpp +++ /dev/null @@ -1,17 +0,0 @@ -class B{ - public: - virtual int f(){ return 0; } -}; - - -void toBr(B& b) -{ - assert(b.f()==0); -} - -int main() -{ - B b; -// assert(b.f()==0); - toBr(b); -} diff --git a/regression/cpp-from-CVS/virtual4/main.cpp b/regression/cpp-from-CVS/virtual4/main.cpp deleted file mode 100644 index 63b3173dde1..00000000000 --- a/regression/cpp-from-CVS/virtual4/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include - -class B -{ -public: - virtual int f() { return 0; } -}; - -class A: public B -{ -public: - int f() { return 1; } -}; - -int main() -{ - A a; - assert(a.A::f()==1); - assert(a.B::f()==0); -} diff --git a/regression/cpp-from-CVS/virtual5/main.cpp b/regression/cpp-from-CVS/virtual5/main.cpp deleted file mode 100644 index cb138ba2819..00000000000 --- a/regression/cpp-from-CVS/virtual5/main.cpp +++ /dev/null @@ -1,19 +0,0 @@ -class B -{ -public: - virtual int f() const {return 0;} -}; - -class A: public B -{ -public: - int f() {return 1;} -}; - -int main() -{ - A a; - B b = (B) a; - assert(b.f()==0); - assert(a.f()==1); -} diff --git a/regression/cpp-from-CVS/virtual6/main.cpp b/regression/cpp-from-CVS/virtual6/main.cpp deleted file mode 100644 index 82a4fbd0e08..00000000000 --- a/regression/cpp-from-CVS/virtual6/main.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include - -class B -{ -public: - virtual int f() const; -}; - -class A: public B -{ -public: - int f() const; -}; - -int B::f() const -{ - return 0; -} - - -int A::f() const -{ - return 1; -} - - -int main() -{ - A a; - B b = (B) a; - B* pB = (B*) &a; - assert(b.f()==0); - assert(pB->f()==1); - assert(a.f()==1); -} diff --git a/regression/cpp-from-CVS/virtual7/main.cpp b/regression/cpp-from-CVS/virtual7/main.cpp deleted file mode 100644 index baebdf96571..00000000000 --- a/regression/cpp-from-CVS/virtual7/main.cpp +++ /dev/null @@ -1,24 +0,0 @@ -class A -{ - public: - virtual int number(){return 0;} -}; - -class B: A -{ - public: - int number() {return 1;} - void test() - { - int n1 = number(); - assert(n1==1); - int n2 = ::A::number(); - assert(n2 == 0); - } -}; - -int main() -{ - B b; - b.test(); -} diff --git a/regression/cpp-from-CVS/virtual8/main.cpp b/regression/cpp-from-CVS/virtual8/main.cpp deleted file mode 100644 index 8db08084016..00000000000 --- a/regression/cpp-from-CVS/virtual8/main.cpp +++ /dev/null @@ -1,22 +0,0 @@ -int g1; -int g2; - -class A -{ - public: - virtual ~A(){g1 = g2+1;} -}; - -class B: public A -{ - public: - ~B(){g2 = 1;} -}; - -int main() -{ - A* pA = new B(); - delete pA; - assert(g2==1); - assert(g1==2); -} diff --git a/regression/cpp-from-CVS/virtual9/main.cpp b/regression/cpp-from-CVS/virtual9/main.cpp deleted file mode 100644 index 5562e35c41a..00000000000 --- a/regression/cpp-from-CVS/virtual9/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ -struct A -{ - virtual int& func(int& i){return i;} -}; - -int main() -{ - A a; - int i = 0; - int j = 1; - - a.func(i) = j; - assert(i==j); -} diff --git a/regression/cpp-from-CVS/virtual9/test.desc b/regression/cpp-from-CVS/virtual9/test.desc deleted file mode 100644 index 7ed391809e9..00000000000 --- a/regression/cpp-from-CVS/virtual9/test.desc +++ /dev/null @@ -1,7 +0,0 @@ -CORE -main.cpp - -^EXIT=0$ -^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ --- diff --git a/regression/cpp-linter/CMakeLists.txt b/regression/cpp-linter/CMakeLists.txt new file mode 100644 index 00000000000..7f8d4cedde5 --- /dev/null +++ b/regression/cpp-linter/CMakeLists.txt @@ -0,0 +1 @@ +add_test_pl_tests("../../../scripts/cpplint.py") diff --git a/regression/cpp-linter/Makefile b/regression/cpp-linter/Makefile index ec9ab1cdea6..b5e30ce103c 100644 --- a/regression/cpp-linter/Makefile +++ b/regression/cpp-linter/Makefile @@ -1,10 +1,10 @@ default: tests.log test: - @../test.pl -p -c "python ../../../scripts/cpplint.py" + @../test.pl -p -c ../../../scripts/cpplint.py tests.log: ../test.pl - @../test.pl -p -c "python ../../../scripts/cpplint.py" + @../test.pl -p -c ../../../scripts/cpplint.py show: @for dir in *; do \ diff --git a/regression/cpp-linter/assert/module_dependencies.txt b/regression/cpp-linter/assert/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/assert/test.desc b/regression/cpp-linter/assert/test.desc index cda85742156..8581a0624c4 100644 --- a/regression/cpp-linter/assert/test.desc +++ b/regression/cpp-linter/assert/test.desc @@ -1,6 +1,7 @@ CORE main.cpp -^main\.cpp:8: assert is deprecated, use INVARIANT instead \[build/deprecated\] \[4\] -^Total errors found: 1$ +^regression/cpp-linter/assert/main\.cpp:8: assert is deprecated, use UNREACHABLE instead \[build/deprecated\] \[4\] +^# Total errors found: 1$ +^EXIT=1$ ^SIGNAL=0$ diff --git a/regression/cpp-linter/catch-cast/module_dependencies.txt b/regression/cpp-linter/catch-cast/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/class-decl-space/main.cpp b/regression/cpp-linter/class-decl-space/main.cpp index 6f0ce90641e..8ab6dedadfb 100644 --- a/regression/cpp-linter/class-decl-space/main.cpp +++ b/regression/cpp-linter/class-decl-space/main.cpp @@ -6,13 +6,14 @@ Author: Thomas Kiley, thomas@diffblue.com \*******************************************************************/ +// clang-format off class temp_classt : public base_classt {} -class another_class : public base_classt +class another_class: public base_classt {} -class more_class:public base_classt +class more_class: public base_classt {} class nonderived @@ -41,3 +42,4 @@ class testt template void bar(U t); } +// clang-format on diff --git a/regression/cpp-linter/class-decl-space/module_dependencies.txt b/regression/cpp-linter/class-decl-space/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/class-decl-space/test.desc b/regression/cpp-linter/class-decl-space/test.desc index c3e5fd574b4..3fd5a57e3a7 100644 --- a/regression/cpp-linter/class-decl-space/test.desc +++ b/regression/cpp-linter/class-decl-space/test.desc @@ -1,14 +1,18 @@ CORE main.cpp -^main\.cpp:9: There shouldn.t be a space between class identifier and : \[readability/identifiers\] \[4\]$ -^main\.cpp:12: There shouldn.t be a space between class identifier and : \[readability/identifiers\] \[4\]$ -^main\.cpp:12: Class or struct identifier should end with t \[readability/identifiers\] \[4\]$ -^main\.cpp:15: Class or struct identifier should end with t \[readability/identifiers\] \[4\]$ -^main\.cpp:18: Class or struct identifier should end with t \[readability/identifiers\] \[4\]$ -^main\.cpp:26: Class or struct identifier should end with t \[readability/identifiers\] \[4\]$ -^main\.cpp:30: Remove spaces around < \[whitespace/operators\] \[4\]$ -^main\.cpp:36: Remove spaces around < \[whitespace/operators\] \[4\]$ -^Total errors found: 8$ +^regression/cpp-linter/class-decl-space/main\.cpp:13: There should be a space between class identifier and : \[readability/identifier_spacing\] \[4\]$ +^regression/cpp-linter/class-decl-space/main\.cpp:16: There should be a space between class identifier and : \[readability/identifier_spacing\] \[4\]$ +^regression/cpp-linter/class-decl-space/main\.cpp:13: Class or struct identifier should end with t \[readability/identifiers\] \[4\]$ +^regression/cpp-linter/class-decl-space/main\.cpp:16: Class or struct identifier should end with t \[readability/identifiers\] \[4\]$ +^regression/cpp-linter/class-decl-space/main\.cpp:19: Class or struct identifier should end with t \[readability/identifiers\] \[4\]$ +^regression/cpp-linter/class-decl-space/main\.cpp:27: Class or struct identifier should end with t \[readability/identifiers\] \[4\]$ +^# Total errors found: 6$ +^EXIT=1$ ^SIGNAL=0$ -- +-- +The following patters are disabled as the corresponding checks in cpplint.py +were commented out in 56aea470fd6 for they yield too many false positives: +^regression/cpp-linter/class-decl-space/main\.cpp:31: Remove spaces around < \[whitespace/operators\] \[4\]$ +^regression/cpp-linter/class-decl-space/main\.cpp:37: Remove spaces around < \[whitespace/operators\] \[4\]$ diff --git a/regression/cpp-linter/do-while1/module_dependencies.txt b/regression/cpp-linter/do-while1/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/do-while1/test.desc b/regression/cpp-linter/do-while1/test.desc index 2d2c6367a42..c53acbb64c1 100644 --- a/regression/cpp-linter/do-while1/test.desc +++ b/regression/cpp-linter/do-while1/test.desc @@ -1,8 +1,9 @@ CORE main.cpp -^main\.cpp:31: Empty loop bodies should use \{\} or continue \[whitespace/empty_loop_body\] \[5\]$ -^main\.cpp:38: Empty loop bodies should use \{\} or continue \[whitespace/empty_loop_body\] \[5\]$ -^Total errors found: 2$ +^regression/cpp-linter/do-while1/main\.cpp:31: Empty loop bodies should use \{\} or continue \[whitespace/empty_loop_body\] \[5\]$ +^regression/cpp-linter/do-while1/main\.cpp:38: Empty loop bodies should use \{\} or continue \[whitespace/empty_loop_body\] \[5\]$ +^# Total errors found: 2$ +^EXIT=1$ ^SIGNAL=0$ -- diff --git a/regression/cpp-linter/do-while2/module_dependencies.txt b/regression/cpp-linter/do-while2/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/do-while2/test.desc b/regression/cpp-linter/do-while2/test.desc index 97ef6886722..5e1ec57cbc5 100644 --- a/regression/cpp-linter/do-while2/test.desc +++ b/regression/cpp-linter/do-while2/test.desc @@ -1,7 +1,10 @@ CORE main.cpp -^main\.cpp:26: while statement of do...while loop should be on a separate line to the closing brace \[readability/braces\] \[4\] -^Total errors found: 1$ +^EXIT=0$ ^SIGNAL=0$ -- +-- +Test was marked as disabled-by-default in a00edd3e6c54. +^main\.cpp:26: while statement of do...while loop should be on a separate line to the closing brace \[readability/braces\] \[4\] +^# Total errors found: 1$ diff --git a/regression/cpp-linter/function-comment-header1/module_dependencies.txt b/regression/cpp-linter/function-comment-header1/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/function-comment-header1/test.desc b/regression/cpp-linter/function-comment-header1/test.desc index 708eecf0783..b578f530a90 100644 --- a/regression/cpp-linter/function-comment-header1/test.desc +++ b/regression/cpp-linter/function-comment-header1/test.desc @@ -1,7 +1,12 @@ -CORE +KNOWNBUG main.cpp ^main\.cpp:26: Could not find function header comment for foo \[readability/function_comment\] \[4\] -^Total errors found: 1$ +^# Total errors found: 1$ +^EXIT=1$ ^SIGNAL=0$ -- +-- +The checking code in cpplint.py was broken in 7302e56a348, where a wrong indent +caused the check to never take place. That's fine, however, as we don't use +these function headers anymore. diff --git a/regression/cpp-linter/function-comment-header2/module_dependencies.txt b/regression/cpp-linter/function-comment-header2/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/function-comment-header2/test.desc b/regression/cpp-linter/function-comment-header2/test.desc index 639c28c6fe3..0817924f1f2 100644 --- a/regression/cpp-linter/function-comment-header2/test.desc +++ b/regression/cpp-linter/function-comment-header2/test.desc @@ -1,9 +1,14 @@ -CORE +KNOWNBUG main.cpp main\.cpp:15: Function header for fun missing Inputs: \[readability/function_comment\] \[4\] main\.cpp:15: Function header for fun missing Outputs: \[readability/function_comment\] \[4\] main\.cpp:15: Function header for fun missing Purpose: \[readability/function_comment\] \[4\] -^Total errors found: 3$ +^# Total errors found: 3$ +^EXIT=1$ ^SIGNAL=0$ -- +-- +The checking code in cpplint.py was broken in 7302e56a348, where a wrong indent +caused the check to never take place. That's fine, however, as we don't use +these function headers anymore. diff --git a/regression/cpp-linter/function-comment-header3/module_dependencies.txt b/regression/cpp-linter/function-comment-header3/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/function-comment-header3/test.desc b/regression/cpp-linter/function-comment-header3/test.desc index 9be52904021..9937a46e191 100644 --- a/regression/cpp-linter/function-comment-header3/test.desc +++ b/regression/cpp-linter/function-comment-header3/test.desc @@ -1,7 +1,12 @@ -CORE +KNOWNBUG main.cpp ^main\.cpp:20: Insert an empty line between function header comment and the function fun \[readability/function_comment\] \[4\]$ -^Total errors found: 1$ +^# Total errors found: 1$ +^EXIT=1$ ^SIGNAL=0$ -- +-- +The checking code in cpplint.py was broken in 7302e56a348, where a wrong indent +caused the check to never take place. That's fine, however, as we don't use +these function headers anymore. diff --git a/regression/cpp-linter/function-comment-header4/module_dependencies.txt b/regression/cpp-linter/function-comment-header4/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/function-comment-header4/test.desc b/regression/cpp-linter/function-comment-header4/test.desc index 0766623cc21..36c9ca0ac94 100644 --- a/regression/cpp-linter/function-comment-header4/test.desc +++ b/regression/cpp-linter/function-comment-header4/test.desc @@ -1,7 +1,12 @@ -CORE +KNOWNBUG main.cpp ^main\.cpp:11: Function: name in the comment doesn.t match the function name \[readability/function_comment\] \[4\] -^Total errors found: 1$ +^# Total errors found: 1$ +^EXIT=1$ ^SIGNAL=0$ -- +-- +The checking code in cpplint.py was broken in 7302e56a348, where a wrong indent +caused the check to never take place. That's fine, however, as we don't use +these function headers anymore. diff --git a/regression/cpp-linter/function-comment-header5/module_dependencies.txt b/regression/cpp-linter/function-comment-header5/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/function-comment-header5/test.desc b/regression/cpp-linter/function-comment-header5/test.desc index 12418d892f4..6bfcbd572f1 100644 --- a/regression/cpp-linter/function-comment-header5/test.desc +++ b/regression/cpp-linter/function-comment-header5/test.desc @@ -1,7 +1,7 @@ CORE main.cpp -^Total errors found: 0$ +^# Total errors found: 0$ ^EXIT=0$ ^SIGNAL=0$ -- diff --git a/regression/cpp-linter/function-comment-header6/module_dependencies.txt b/regression/cpp-linter/function-comment-header6/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/function-comment-header6/test.desc b/regression/cpp-linter/function-comment-header6/test.desc index 12418d892f4..6bfcbd572f1 100644 --- a/regression/cpp-linter/function-comment-header6/test.desc +++ b/regression/cpp-linter/function-comment-header6/test.desc @@ -1,7 +1,7 @@ CORE main.cpp -^Total errors found: 0$ +^# Total errors found: 0$ ^EXIT=0$ ^SIGNAL=0$ -- diff --git a/regression/cpp-linter/function-comment-header7/module_dependencies.txt b/regression/cpp-linter/function-comment-header7/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/function-comment-header7/test.desc b/regression/cpp-linter/function-comment-header7/test.desc index 12418d892f4..6bfcbd572f1 100644 --- a/regression/cpp-linter/function-comment-header7/test.desc +++ b/regression/cpp-linter/function-comment-header7/test.desc @@ -1,7 +1,7 @@ CORE main.cpp -^Total errors found: 0$ +^# Total errors found: 0$ ^EXIT=0$ ^SIGNAL=0$ -- diff --git a/regression/cpp-linter/if-else1/module_dependencies.txt b/regression/cpp-linter/if-else1/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/if-else1/test.desc b/regression/cpp-linter/if-else1/test.desc index c78c36bdc30..4465caeee6c 100644 --- a/regression/cpp-linter/if-else1/test.desc +++ b/regression/cpp-linter/if-else1/test.desc @@ -1,11 +1,15 @@ CORE main.cpp -^main\.cpp:24: Put braces on a separate next line \[whitespace/braces\] \[5\]$ -^main\.cpp:26: Put braces on a separate next line \[whitespace/braces\] \[5\]$ -^main\.cpp:26: Else if should be on a new line after closing brace \[readability/braces\] \[5\]$ -^main\.cpp:28: Put braces on a separate next line \[whitespace/braces\] \[5\]$ -^main\.cpp:28: Else should be on a new line after closing brace \[readability/braces\] \[5\]$ -^Total errors found: 5$ +^regression/cpp-linter/if-else1/main\.cpp:26: Else if should be on a new line after closing brace \[readability/braces\] \[5\]$ +^regression/cpp-linter/if-else1/main\.cpp:28: Else should be on a new line after closing brace \[readability/braces\] \[5\]$ +^# Total errors found: 2$ +^EXIT=1$ ^SIGNAL=0$ -- +-- +The following patters are disabled as the corresponding checks in cpplint.py +were removed in 692c4f377 for they are covered by clang-format: +^regression/cpp-linter/if-else1/main\.cpp:24: Put braces on a separate next line \[whitespace/braces\] \[5\]$ +^regression/cpp-linter/if-else1/main\.cpp:26: Put braces on a separate next line \[whitespace/braces\] \[5\]$ +^regression/cpp-linter/if-else1/main\.cpp:28: Put braces on a separate next line \[whitespace/braces\] \[5\]$ diff --git a/regression/cpp-linter/if-else2/module_dependencies.txt b/regression/cpp-linter/if-else2/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/if-else2/test.desc b/regression/cpp-linter/if-else2/test.desc index b60b15b039d..b83ecb4e21e 100644 --- a/regression/cpp-linter/if-else2/test.desc +++ b/regression/cpp-linter/if-else2/test.desc @@ -1,9 +1,13 @@ CORE main.cpp +^EXIT=0$ +^SIGNAL=0$ +-- +-- +The following patters are disabled as the corresponding checks in cpplint.py +were removed in 692c4f377 for they are covered by clang-format: ^main\.cpp:23: Put braces on a separate next line \[whitespace/braces\] \[5\]$ ^main\.cpp:26: Put braces on a separate next line \[whitespace/braces\] \[5\]$ ^main\.cpp:29: Put braces on a separate next line \[whitespace/braces\] \[5\]$ -^Total errors found: 3$ -^SIGNAL=0$ --- +^# Total errors found: 3$ diff --git a/regression/cpp-linter/if-else3/module_dependencies.txt b/regression/cpp-linter/if-else3/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/if-else3/test.desc b/regression/cpp-linter/if-else3/test.desc index 0199293038f..42c6c9a5664 100644 --- a/regression/cpp-linter/if-else3/test.desc +++ b/regression/cpp-linter/if-else3/test.desc @@ -1,9 +1,13 @@ CORE main.cpp -^main\.cpp:24: Statement after an if should be on a new line \[readability/braces\] \[5\]$ -^main\.cpp:25: Statement after else if should be on a new line \[readability/braces\] \[5\]$ -^main\.cpp:26: Statement after else should be on a new line \[readability/braces\] \[5\]$ -^Total errors found: 3$ +^regression/cpp-linter/if-else3/main\.cpp:24: Statement after an if should be on a new line \[readability/braces\] \[5\]$ +^regression/cpp-linter/if-else3/main\.cpp:25: Statement after else if should be on a new line \[readability/braces\] \[5\]$ +^# Total errors found: 2$ +^EXIT=1$ ^SIGNAL=0$ -- +-- +The following patters are disabled as the corresponding checks in cpplint.py +were commented out in 56aea470fd6 for they yield too many false positives: +^regression/cpp-linter/if-else3/main\.cpp:26: Statement after else should be on a new line \[readability/braces\] \[5\]$ diff --git a/regression/cpp-linter/if-else4/module_dependencies.txt b/regression/cpp-linter/if-else4/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/if-else4/test.desc b/regression/cpp-linter/if-else4/test.desc index 0199293038f..33680bd83e8 100644 --- a/regression/cpp-linter/if-else4/test.desc +++ b/regression/cpp-linter/if-else4/test.desc @@ -1,9 +1,13 @@ CORE main.cpp -^main\.cpp:24: Statement after an if should be on a new line \[readability/braces\] \[5\]$ -^main\.cpp:25: Statement after else if should be on a new line \[readability/braces\] \[5\]$ -^main\.cpp:26: Statement after else should be on a new line \[readability/braces\] \[5\]$ -^Total errors found: 3$ +^regression/cpp-linter/if-else4/main\.cpp:24: Statement after an if should be on a new line \[readability/braces\] \[5\]$ +^regression/cpp-linter/if-else4/main\.cpp:25: Statement after else if should be on a new line \[readability/braces\] \[5\]$ +^# Total errors found: 2$ +^EXIT=1$ ^SIGNAL=0$ -- +-- +The following patters are disabled as the corresponding checks in cpplint.py +were commented out in 56aea470fd6 for they yield too many false positives: +^regression/cpp-linter/if-else4/main\.cpp:26: Statement after else should be on a new line \[readability/braces\] \[5\]$ diff --git a/regression/cpp-linter/if-else5/module_dependencies.txt b/regression/cpp-linter/if-else5/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/if-else5/test.desc b/regression/cpp-linter/if-else5/test.desc index 12418d892f4..6bfcbd572f1 100644 --- a/regression/cpp-linter/if-else5/test.desc +++ b/regression/cpp-linter/if-else5/test.desc @@ -1,7 +1,7 @@ CORE main.cpp -^Total errors found: 0$ +^# Total errors found: 0$ ^EXIT=0$ ^SIGNAL=0$ -- diff --git a/regression/cpp-linter/if-else6/module_dependencies.txt b/regression/cpp-linter/if-else6/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/if-else6/test.desc b/regression/cpp-linter/if-else6/test.desc index 12418d892f4..6bfcbd572f1 100644 --- a/regression/cpp-linter/if-else6/test.desc +++ b/regression/cpp-linter/if-else6/test.desc @@ -1,7 +1,7 @@ CORE main.cpp -^Total errors found: 0$ +^# Total errors found: 0$ ^EXIT=0$ ^SIGNAL=0$ -- diff --git a/regression/cpp-linter/multi-line-comment/module_dependencies.txt b/regression/cpp-linter/multi-line-comment/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/multi-line-function-call1/module_dependencies.txt b/regression/cpp-linter/multi-line-function-call1/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/multi-line-function-call1/test.desc b/regression/cpp-linter/multi-line-function-call1/test.desc index 14cd2f06ff2..d6dd1b001cc 100644 --- a/regression/cpp-linter/multi-line-function-call1/test.desc +++ b/regression/cpp-linter/multi-line-function-call1/test.desc @@ -1,6 +1,12 @@ CORE main.cpp +^EXIT=0$ +^SIGNAL=0$ +-- +-- +The following patters are disabled as the corresponding checks in cpplint.py +were commented out in 56aea470fd6 for they yield too many false positives: ^main\.cpp:29: If parameters or arguments require a line break, each parameter should be put on its own line\. \[whitespace/indent\] \[4\] ^main\.cpp:34: Indent of wrapped parenthesized expression or parameter or argument list should be 2 \[whitespace/indent\] \[4\] ^main\.cpp:43: If parameters or arguments require a line break, each parameter should be put on its own line\. \[whitespace/indent\] \[4\] @@ -11,7 +17,4 @@ main.cpp ^main\.cpp:76: Indent of wrapped parenthesized expression or parameter or argument list should be 2 \[whitespace/indent\] \[4\] ^main\.cpp:81: If parameters or arguments require a line break, the closing bracket should be on the same line as the final parameter \[whitespace/indent\] \[4\] ^main\.cpp:85: If parameters or arguments require a line break, each parameter should be put on its own line. \[whitespace/indent\] \[4\] -^Total errors found: 10$ -^EXIT=1$ -^SIGNAL=0$ --- +^# Total errors found: 10$ diff --git a/regression/cpp-linter/multi-line-function-call2/module_dependencies.txt b/regression/cpp-linter/multi-line-function-call2/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/multi-line-function-call2/test.desc b/regression/cpp-linter/multi-line-function-call2/test.desc index 2fb7df0f981..28d719f4845 100644 --- a/regression/cpp-linter/multi-line-function-call2/test.desc +++ b/regression/cpp-linter/multi-line-function-call2/test.desc @@ -1,11 +1,14 @@ CORE main.cpp +^EXIT=0$ +^SIGNAL=0$ +-- +-- +The following patters are disabled as the corresponding checks in cpplint.py +were commented out in 56aea470fd6 for they yield too many false positives: ^main\.cpp:24: If parameters or arguments require a line break, each parameter should be put on its own line\. \[whitespace/indent\] \[4\] ^main\.cpp:29: Indent of wrapped parenthesized expression or parameter or argument list should be 2 \[whitespace/indent\] \[4\] ^main\.cpp:60: If parameters or arguments require a line break, each parameter should be put on its own line\. \[whitespace/indent\] \[4\] ^main\.cpp:65: If parameters or arguments require a line break, each parameter should be put on its own line\. \[whitespace/indent\] \[4\] -^Total errors found: 4$ -^EXIT=1$ -^SIGNAL=0$ --- +^# Total errors found: 4$ diff --git a/regression/cpp-linter/multi-line-function-call3/module_dependencies.txt b/regression/cpp-linter/multi-line-function-call3/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/multi-line-function-call3/test.desc b/regression/cpp-linter/multi-line-function-call3/test.desc index 12418d892f4..6bfcbd572f1 100644 --- a/regression/cpp-linter/multi-line-function-call3/test.desc +++ b/regression/cpp-linter/multi-line-function-call3/test.desc @@ -1,7 +1,7 @@ CORE main.cpp -^Total errors found: 0$ +^# Total errors found: 0$ ^EXIT=0$ ^SIGNAL=0$ -- diff --git a/regression/cpp-linter/multi-line-string1/module_dependencies.txt b/regression/cpp-linter/multi-line-string1/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/multi-line-string2/module_dependencies.txt b/regression/cpp-linter/multi-line-string2/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/namespace/module_dependencies.txt b/regression/cpp-linter/namespace/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/operator-spacing1/module_dependencies.txt b/regression/cpp-linter/operator-spacing1/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/operator-spacing1/test.desc b/regression/cpp-linter/operator-spacing1/test.desc index c988ced295b..ab5ab156769 100644 --- a/regression/cpp-linter/operator-spacing1/test.desc +++ b/regression/cpp-linter/operator-spacing1/test.desc @@ -1,7 +1,11 @@ -CORE +FUTURE main.cpp ^main\.cpp:23: Remove spaces around = \[whitespace/operators\] \[4\] -^Total errors found: 1$ +^# Total errors found: 1$ +^EXIT=1$ ^SIGNAL=0$ -- +-- +Test disabled (marked as "FUTURE") as the corresponding checks in cpplint.py +were commented out in 56aea470fd6 for they yield too many false positives. diff --git a/regression/cpp-linter/operator-spacing2/module_dependencies.txt b/regression/cpp-linter/operator-spacing2/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/operator-spacing2/test.desc b/regression/cpp-linter/operator-spacing2/test.desc index 12418d892f4..6bfcbd572f1 100644 --- a/regression/cpp-linter/operator-spacing2/test.desc +++ b/regression/cpp-linter/operator-spacing2/test.desc @@ -1,7 +1,7 @@ CORE main.cpp -^Total errors found: 0$ +^# Total errors found: 0$ ^EXIT=0$ ^SIGNAL=0$ -- diff --git a/regression/cpp-linter/operator-spacing3/module_dependencies.txt b/regression/cpp-linter/operator-spacing3/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/operator-spacing3/test.desc b/regression/cpp-linter/operator-spacing3/test.desc index 056369e4df6..cc79168d003 100644 --- a/regression/cpp-linter/operator-spacing3/test.desc +++ b/regression/cpp-linter/operator-spacing3/test.desc @@ -5,6 +5,7 @@ main.cpp ^main\.cpp:27: Missing spaces around << \[whitespace/operators\] \[3\] ^main\.cpp:29: Remove spaces around << \[whitespace/operators\] \[4\] ^main\.cpp:29: Remove spaces around << \[whitespace/operators\] \[4\] -^Total errors found: 4$ +^# Total errors found: 4$ +^EXIT=1$ ^SIGNAL=0$ -- diff --git a/regression/cpp-linter/override-final/main.cpp b/regression/cpp-linter/override-final/main.cpp index 455a029f774..726efd71630 100644 --- a/regression/cpp-linter/override-final/main.cpp +++ b/regression/cpp-linter/override-final/main.cpp @@ -6,7 +6,7 @@ Author: Thomas Kiley, thomas@diffblue.com \*******************************************************************/ -class test_classt:public base_classt +class test_classt : public base_classt { public: virtual void fun() override final; diff --git a/regression/cpp-linter/override-final/module_dependencies.txt b/regression/cpp-linter/override-final/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/override-final/test.desc b/regression/cpp-linter/override-final/test.desc index 63fbf20a5ee..9b6e9498a23 100644 --- a/regression/cpp-linter/override-final/test.desc +++ b/regression/cpp-linter/override-final/test.desc @@ -1,6 +1,7 @@ CORE main.cpp -^EXIT=0$ +^regression/cpp-linter/override-final/main\.cpp:12: "virtual" is redundant since function is already declared as "override" \[readability/inheritance\] \[4\]$ +^EXIT=1$ ^SIGNAL=0$ -- diff --git a/regression/cpp-linter/pointer-type1/module_dependencies.txt b/regression/cpp-linter/pointer-type1/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/pointer-type1/test.desc b/regression/cpp-linter/pointer-type1/test.desc index 548cc52eee1..3a48b6e6223 100644 --- a/regression/cpp-linter/pointer-type1/test.desc +++ b/regression/cpp-linter/pointer-type1/test.desc @@ -1,8 +1,9 @@ CORE main.cpp -^main\.cpp:24: Pointer type name must have \* attached to the type name \[whitespace/operators\] \[4\]$ -^main\.cpp:27: Reference type name must have & attached to the type name \[whitespace/operators\] \[4\]$ -^Total errors found: 2$ +^regression/cpp-linter/pointer-type1/main\.cpp:24: Pointer type name must have \* attached to the type name \[whitespace/operators\] \[4\]$ +^regression/cpp-linter/pointer-type1/main\.cpp:27: Reference type name must have & attached to the type name \[whitespace/operators\] \[4\]$ +^# Total errors found: 2$ +^EXIT=1$ ^SIGNAL=0$ -- diff --git a/regression/cpp-linter/prefix-increment/module_dependencies.txt b/regression/cpp-linter/prefix-increment/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/struct-inline-decl/module_dependencies.txt b/regression/cpp-linter/struct-inline-decl/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/struct-inline-decl/test.desc b/regression/cpp-linter/struct-inline-decl/test.desc index 12418d892f4..6bfcbd572f1 100644 --- a/regression/cpp-linter/struct-inline-decl/test.desc +++ b/regression/cpp-linter/struct-inline-decl/test.desc @@ -1,7 +1,7 @@ CORE main.cpp -^Total errors found: 0$ +^# Total errors found: 0$ ^EXIT=0$ ^SIGNAL=0$ -- diff --git a/regression/cpp-linter/template-types/module_dependencies.txt b/regression/cpp-linter/template-types/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/template-types/test.desc b/regression/cpp-linter/template-types/test.desc index 280b37b71b0..c319055444b 100644 --- a/regression/cpp-linter/template-types/test.desc +++ b/regression/cpp-linter/template-types/test.desc @@ -1,7 +1,11 @@ -CORE +FUTURE main.cpp ^main\.cpp:29: Remove spaces around > \[whitespace/operators\] \[4\]$ -^Total errors found: 1$ +^# Total errors found: 1$ +^EXIT=1$ ^SIGNAL=0$ -- +-- +Test disabled (marked as "FUTURE") as the corresponding checks in cpplint.py +were commented out in 56aea470fd6 for they yield too many false positives. diff --git a/regression/cpp-linter/throw/module_dependencies.txt b/regression/cpp-linter/throw/module_dependencies.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/cpp-linter/throw/test.desc b/regression/cpp-linter/throw/test.desc index 3162178e4e1..16d9d0079cf 100644 --- a/regression/cpp-linter/throw/test.desc +++ b/regression/cpp-linter/throw/test.desc @@ -7,6 +7,7 @@ main\.cpp:26: Do not include brackets when throwing an error \[readability/thr main\.cpp:28: First character of throw error message should be lower case \[readability/throw\] \[4\] main\.cpp:29: Do not include brackets when throwing an error \[readability/throw\] \[4\] main\.cpp:29: First character of throw error message should be lower case \[readability/throw\] \[4\] -^Total errors found: 6$ +^# Total errors found: 6$ +^EXIT=1$ ^SIGNAL=0$ -- diff --git a/regression/cpp/Address_of_Method4/main.cpp b/regression/cpp/Address_of_Method4/main.cpp new file mode 100644 index 00000000000..a7e3d0b5989 --- /dev/null +++ b/regression/cpp/Address_of_Method4/main.cpp @@ -0,0 +1,21 @@ +struct x +{ + void f(); + int f(int); +}; + +void x::f() +{ +} + +int x::f(int i) +{ + return i; +} + +int main() +{ + int (x::*pf)(int) = &x::f; + // x x1; + // assert((x1.*pf)(0) == 0); +} diff --git a/regression/cpp/Address_of_Method4/test.desc b/regression/cpp/Address_of_Method4/test.desc new file mode 100644 index 00000000000..8cd7c4ac778 --- /dev/null +++ b/regression/cpp/Address_of_Method4/test.desc @@ -0,0 +1,7 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +-- +^warning: ignoring diff --git a/regression/cpp/Protection1/main.cpp b/regression/cpp/Protection1/main.cpp new file mode 100644 index 00000000000..6b0aeed9b78 --- /dev/null +++ b/regression/cpp/Protection1/main.cpp @@ -0,0 +1,19 @@ +class A +{ + int i; + A(int i) : i(i) + { + } + +private: + A(); // disabled +}; + +class B : A +{ +}; + +int main(int argc, char *argv[]) +{ + B b; +} diff --git a/regression/cpp/Protection1/test.desc b/regression/cpp/Protection1/test.desc new file mode 100644 index 00000000000..9f81962671b --- /dev/null +++ b/regression/cpp/Protection1/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=6$ +^SIGNAL=0$ +^CONVERSION ERROR$ +-- +^warning: ignoring diff --git a/regression/cpp/Templates15/main.cpp b/regression/cpp/Templates15/main.cpp new file mode 100644 index 00000000000..2e9bdb72efc --- /dev/null +++ b/regression/cpp/Templates15/main.cpp @@ -0,0 +1,8 @@ +template +struct A +{ + int a; +}; + +template +struct A; diff --git a/regression/cpp/Templates15/test.desc b/regression/cpp/Templates15/test.desc new file mode 100644 index 00000000000..9f81962671b --- /dev/null +++ b/regression/cpp/Templates15/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +main.cpp + +^EXIT=6$ +^SIGNAL=0$ +^CONVERSION ERROR$ +-- +^warning: ignoring diff --git a/regression/cpp/Templates33/main.cpp b/regression/cpp/Templates33/main.cpp new file mode 100644 index 00000000000..de1a9eb466c --- /dev/null +++ b/regression/cpp/Templates33/main.cpp @@ -0,0 +1,13 @@ +template +class X +{ +public: + typename T::asd asd; +}; + +// this won't fail! +typedef X Z; + +int main() +{ +} diff --git a/regression/cpp/Templates33/test.desc b/regression/cpp/Templates33/test.desc new file mode 100644 index 00000000000..8cd7c4ac778 --- /dev/null +++ b/regression/cpp/Templates33/test.desc @@ -0,0 +1,7 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/CMakeLists.txt b/regression/goto-instrument-wmm-core/CMakeLists.txt new file mode 100644 index 00000000000..f1fbcc356fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/CMakeLists.txt @@ -0,0 +1,9 @@ +if(WIN32) + set(is_windows true) +else() + set(is_windows false) +endif() + +add_test_pl_tests( + "${CMAKE_CURRENT_SOURCE_DIR}/chain.sh $ $ $ ${is_windows}" -X glpk +) diff --git a/regression/goto-instrument-wmm-core/Makefile b/regression/goto-instrument-wmm-core/Makefile index 85c17bf622b..ebe8d28a6e9 100644 --- a/regression/goto-instrument-wmm-core/Makefile +++ b/regression/goto-instrument-wmm-core/Makefile @@ -1,29 +1,40 @@ default: tests.log +include ../../src/config.inc +include ../../src/common + +ifeq ($(BUILD_ENV_),MSVC) + exe=../../../src/goto-cc/goto-cl + is_windows=true +else + exe=../../../src/goto-cc/goto-cc + is_windows=false +endif + testalpha: - @../test.pl -c ../chain.sh -C + @../test.pl -C -e -p -c '../chain.sh $(exe) ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc $(is_windows)' -X glpk testbeta: - @../test.pl -c ../chain.sh -T + @../test.pl -T -e -p -c '../chain.sh $(exe) ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc $(is_windows)' -X glpk testimpr: - @../test.pl -c ../chain.sh -K + @../test.pl -K -e -p -c '../chain.sh $(exe) ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc $(is_windows)' -X glpk testnew: - @../test.pl -c ../chain.sh -F + @../test.pl -F -e -p -c '../chain.sh $(exe) ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc $(is_windows)' -X glpk test: - @../test.pl -c ../chain.sh + @../test.pl -e -p -c '../chain.sh $(exe) ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc $(is_windows)' -X glpk -tests.log: ../test.pl - @../test.pl -c ../chain.sh +tests.log: + @../test.pl -e -p -c '../chain.sh $(exe) ../../../src/goto-instrument/goto-instrument ../../../src/cbmc/cbmc $(is_windows)' -X glpk clean: - @for dir in *; do \ - if [ -d "$$dir" ]; then \ - $(RM) $$dir/*.txt $$dir/*.dot $$dir/*.gb $$dir/*.out; \ - fi; \ - done; + find . -name '*.out' -execdir $(RM) '{}' \; + find . -name '*.gb' -execdir $(RM) '{}' \; + find . -name '*.dot' -execdir $(RM) '{}' \; + find . -mindepth 2 -name '*.txt' -execdir $(RM) '{}' \; + $(RM) tests.log show: @for dir in *; do \ diff --git a/regression/goto-instrument-wmm-core/chain.sh b/regression/goto-instrument-wmm-core/chain.sh index 9081eeb0a72..bc20a12d802 100755 --- a/regression/goto-instrument-wmm-core/chain.sh +++ b/regression/goto-instrument-wmm-core/chain.sh @@ -1,9 +1,13 @@ #!/bin/bash -src=../../../src -goto_cc=$src/goto-cc/goto-cc -goto_instrument=$src/goto-instrument/goto-instrument -cbmc=$src/cbmc/cbmc +set -e + +goto_cc=$1 +goto_instrument=$2 +cbmc=$3 +is_windows=$4 + +shift 4 function usage() { echo "Usage: chain architecture [strategy] test_file.c" @@ -24,8 +28,8 @@ else usage fi -arch=${arch,,} -strategy=${strategy,,} +arch=$(echo $arch | tr A-Z a-z) +strategy=$(echo $strategy | tr A-Z a-z) if [[ "tso|pso|rmo|power|arm|sc|cav11|" =~ "$arch|" ]] then @@ -54,6 +58,10 @@ else flag= fi -timeout 180.0s $goto_cc -o $name.gb $name.c -timeout 180.0s $goto_instrument $flag $name.gb ${name}_$arch.gb $strat -timeout 180.0s $cbmc ${name}_$arch.gb +if [[ "${is_windows}" == "true" ]]; then + $goto_cc "${name}.c" "/Fe${name}.gb" +else + $goto_cc -o "${name}.gb" "${name}.c" +fi +perl -e 'alarm shift @ARGV; exec @ARGV' 180 "$goto_instrument" $flag "$name.gb" "${name}_$arch.gb" $strat +perl -e 'alarm shift @ARGV; exec @ARGV' 180 "$cbmc" "${name}_$arch.gb" diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_CAV11_ERROR/aclwdrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_CAV11_ERROR/aclwdrr000.c new file mode 100644 index 00000000000..dbcf57315f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_CAV11_ERROR/aclwdrr000.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..6a40fee064c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_ALL/aclwdrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_ALL/aclwdrr000.c new file mode 100644 index 00000000000..dbcf57315f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_ALL/aclwdrr000.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_ALL/test.desc new file mode 100644 index 00000000000..c9b7871e454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_OPC/aclwdrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_OPC/aclwdrr000.c new file mode 100644 index 00000000000..dbcf57315f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_OPC/aclwdrr000.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_OPC/test.desc new file mode 100644 index 00000000000..3a46bf0d0ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_OPT/aclwdrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_OPT/aclwdrr000.c new file mode 100644 index 00000000000..dbcf57315f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_OPT/aclwdrr000.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_OPT/test.desc new file mode 100644 index 00000000000..c72ab77e25d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_ALL/aclwdrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_ALL/aclwdrr000.c new file mode 100644 index 00000000000..dbcf57315f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_ALL/aclwdrr000.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_ALL/test.desc new file mode 100644 index 00000000000..3df3289c24d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr000.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_OPC/aclwdrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_OPC/aclwdrr000.c new file mode 100644 index 00000000000..dbcf57315f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_OPC/aclwdrr000.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_OPC/test.desc new file mode 100644 index 00000000000..76febe0b852 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr000.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_OPT/aclwdrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_OPT/aclwdrr000.c new file mode 100644 index 00000000000..dbcf57315f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_OPT/aclwdrr000.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_OPT/test.desc new file mode 100644 index 00000000000..eba231d8d80 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr000.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_ALL/aclwdrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_ALL/aclwdrr000.c new file mode 100644 index 00000000000..dbcf57315f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_ALL/aclwdrr000.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_ALL/test.desc new file mode 100644 index 00000000000..beb2fde311d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr000.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_OPC/aclwdrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_OPC/aclwdrr000.c new file mode 100644 index 00000000000..dbcf57315f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_OPC/aclwdrr000.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_OPC/test.desc new file mode 100644 index 00000000000..3ee375683ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr000.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_OPT/aclwdrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_OPT/aclwdrr000.c new file mode 100644 index 00000000000..dbcf57315f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_OPT/aclwdrr000.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_OPT/test.desc new file mode 100644 index 00000000000..15918a0197d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr000.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_SC_SAFE/aclwdrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_SC_SAFE/aclwdrr000.c new file mode 100644 index 00000000000..dbcf57315f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_SC_SAFE/aclwdrr000.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_SC_SAFE/test.desc new file mode 100644 index 00000000000..6c176e98189 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_ALL/aclwdrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_ALL/aclwdrr000.c new file mode 100644 index 00000000000..dbcf57315f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_ALL/aclwdrr000.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_ALL/test.desc new file mode 100644 index 00000000000..b24d68025dc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr000.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_OPC/aclwdrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_OPC/aclwdrr000.c new file mode 100644 index 00000000000..dbcf57315f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_OPC/aclwdrr000.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_OPC/test.desc new file mode 100644 index 00000000000..d38704530c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr000.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_OPT/aclwdrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_OPT/aclwdrr000.c new file mode 100644 index 00000000000..dbcf57315f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_OPT/aclwdrr000.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_OPT/test.desc new file mode 100644 index 00000000000..421fe5c3cad --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr000.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_CAV11_ERROR/aclwdrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_CAV11_ERROR/aclwdrr001.c new file mode 100644 index 00000000000..0a859fcfdf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_CAV11_ERROR/aclwdrr001.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..55b7767338e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr001.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_ALL/aclwdrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_ALL/aclwdrr001.c new file mode 100644 index 00000000000..0a859fcfdf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_ALL/aclwdrr001.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_ALL/test.desc new file mode 100644 index 00000000000..35460c147af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_OPC/aclwdrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_OPC/aclwdrr001.c new file mode 100644 index 00000000000..0a859fcfdf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_OPC/aclwdrr001.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_OPC/test.desc new file mode 100644 index 00000000000..94e1f7bf150 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_OPT/aclwdrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_OPT/aclwdrr001.c new file mode 100644 index 00000000000..0a859fcfdf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_OPT/aclwdrr001.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_OPT/test.desc new file mode 100644 index 00000000000..4d2108be407 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr001.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_ALL/aclwdrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_ALL/aclwdrr001.c new file mode 100644 index 00000000000..0a859fcfdf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_ALL/aclwdrr001.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_ALL/test.desc new file mode 100644 index 00000000000..f02bd904823 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr001.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_OPC/aclwdrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_OPC/aclwdrr001.c new file mode 100644 index 00000000000..0a859fcfdf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_OPC/aclwdrr001.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_OPC/test.desc new file mode 100644 index 00000000000..3a27b8fdba7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr001.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_OPT/aclwdrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_OPT/aclwdrr001.c new file mode 100644 index 00000000000..0a859fcfdf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_OPT/aclwdrr001.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_OPT/test.desc new file mode 100644 index 00000000000..a02669786dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr001.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_ALL/aclwdrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_ALL/aclwdrr001.c new file mode 100644 index 00000000000..0a859fcfdf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_ALL/aclwdrr001.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_ALL/test.desc new file mode 100644 index 00000000000..6e8213cce86 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr001.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_OPC/aclwdrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_OPC/aclwdrr001.c new file mode 100644 index 00000000000..0a859fcfdf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_OPC/aclwdrr001.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_OPC/test.desc new file mode 100644 index 00000000000..271f59b6847 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr001.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_OPT/aclwdrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_OPT/aclwdrr001.c new file mode 100644 index 00000000000..0a859fcfdf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_OPT/aclwdrr001.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_OPT/test.desc new file mode 100644 index 00000000000..f43f07704f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr001.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_SC_SAFE/aclwdrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_SC_SAFE/aclwdrr001.c new file mode 100644 index 00000000000..0a859fcfdf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_SC_SAFE/aclwdrr001.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_SC_SAFE/test.desc new file mode 100644 index 00000000000..eafe628abb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_ALL/aclwdrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_ALL/aclwdrr001.c new file mode 100644 index 00000000000..0a859fcfdf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_ALL/aclwdrr001.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_ALL/test.desc new file mode 100644 index 00000000000..54994dcd301 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr001.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_OPC/aclwdrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_OPC/aclwdrr001.c new file mode 100644 index 00000000000..0a859fcfdf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_OPC/aclwdrr001.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_OPC/test.desc new file mode 100644 index 00000000000..a39d2e14dac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr001.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_OPT/aclwdrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_OPT/aclwdrr001.c new file mode 100644 index 00000000000..0a859fcfdf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_OPT/aclwdrr001.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_OPT/test.desc new file mode 100644 index 00000000000..512a40019d3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr001.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_CAV11_SAFE/aclwdrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_CAV11_SAFE/aclwdrr002.c new file mode 100644 index 00000000000..1a46a0a2023 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_CAV11_SAFE/aclwdrr002.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..730faee9d32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr002.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_POWER_ALL/aclwdrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_POWER_ALL/aclwdrr002.c new file mode 100644 index 00000000000..1a46a0a2023 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_POWER_ALL/aclwdrr002.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_POWER_ALL/test.desc new file mode 100644 index 00000000000..1b6f7116ec9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +aclwdrr002.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_POWER_OPC/aclwdrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_POWER_OPC/aclwdrr002.c new file mode 100644 index 00000000000..1a46a0a2023 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_POWER_OPC/aclwdrr002.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_POWER_OPC/test.desc new file mode 100644 index 00000000000..17634225bb4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr002.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_POWER_OPT/test.desc index eef495ecf4d..23f828083f8 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk aclwdrr002.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_ALL/aclwdrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_ALL/aclwdrr002.c new file mode 100644 index 00000000000..1a46a0a2023 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_ALL/aclwdrr002.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_ALL/test.desc new file mode 100644 index 00000000000..2a1d12f02db --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr002.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_OPC/aclwdrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_OPC/aclwdrr002.c new file mode 100644 index 00000000000..1a46a0a2023 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_OPC/aclwdrr002.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_OPC/test.desc new file mode 100644 index 00000000000..d23736d5a4a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr002.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_OPT/aclwdrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_OPT/aclwdrr002.c new file mode 100644 index 00000000000..1a46a0a2023 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_OPT/aclwdrr002.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_OPT/test.desc new file mode 100644 index 00000000000..8c19a3920fb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr002.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_ALL/aclwdrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_ALL/aclwdrr002.c new file mode 100644 index 00000000000..1a46a0a2023 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_ALL/aclwdrr002.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_ALL/test.desc new file mode 100644 index 00000000000..053c8771f6f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr002.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_OPC/aclwdrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_OPC/aclwdrr002.c new file mode 100644 index 00000000000..1a46a0a2023 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_OPC/aclwdrr002.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_OPC/test.desc new file mode 100644 index 00000000000..3207b91d533 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr002.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_OPT/aclwdrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_OPT/aclwdrr002.c new file mode 100644 index 00000000000..1a46a0a2023 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_OPT/aclwdrr002.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_OPT/test.desc new file mode 100644 index 00000000000..ee1c18f4077 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr002.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_SC_SAFE/aclwdrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_SC_SAFE/aclwdrr002.c new file mode 100644 index 00000000000..1a46a0a2023 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_SC_SAFE/aclwdrr002.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_SC_SAFE/test.desc new file mode 100644 index 00000000000..7b0d369158e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr002.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_ALL/aclwdrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_ALL/aclwdrr002.c new file mode 100644 index 00000000000..1a46a0a2023 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_ALL/aclwdrr002.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_ALL/test.desc new file mode 100644 index 00000000000..c16486c7dd5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +aclwdrr002.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_OPC/aclwdrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_OPC/aclwdrr002.c new file mode 100644 index 00000000000..1a46a0a2023 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_OPC/aclwdrr002.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_OPC/test.desc new file mode 100644 index 00000000000..b0cc4fd2c31 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +aclwdrr002.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_OPT/aclwdrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_OPT/aclwdrr002.c new file mode 100644 index 00000000000..1a46a0a2023 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_OPT/aclwdrr002.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_OPT/test.desc new file mode 100644 index 00000000000..f61fb2a2487 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr002_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr002.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_CAV11_SAFE/aclwdrr003.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_CAV11_SAFE/aclwdrr003.c new file mode 100644 index 00000000000..62f28b33cf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_CAV11_SAFE/aclwdrr003.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..1e727fe2281 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr003.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_ALL/aclwdrr003.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_ALL/aclwdrr003.c new file mode 100644 index 00000000000..62f28b33cf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_ALL/aclwdrr003.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_ALL/test.desc new file mode 100644 index 00000000000..008507e75fb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr003.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_OPC/aclwdrr003.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_OPC/aclwdrr003.c new file mode 100644 index 00000000000..62f28b33cf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_OPC/aclwdrr003.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_OPC/test.desc new file mode 100644 index 00000000000..3ce2f531f78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr003.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_OPT/aclwdrr003.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_OPT/aclwdrr003.c new file mode 100644 index 00000000000..62f28b33cf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_OPT/aclwdrr003.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_OPT/test.desc new file mode 100644 index 00000000000..bb9117a6654 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr003.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_ALL/aclwdrr003.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_ALL/aclwdrr003.c new file mode 100644 index 00000000000..62f28b33cf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_ALL/aclwdrr003.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_ALL/test.desc new file mode 100644 index 00000000000..5811047555e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr003.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_OPC/aclwdrr003.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_OPC/aclwdrr003.c new file mode 100644 index 00000000000..62f28b33cf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_OPC/aclwdrr003.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_OPC/test.desc new file mode 100644 index 00000000000..79275e3fb15 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr003.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_OPT/aclwdrr003.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_OPT/aclwdrr003.c new file mode 100644 index 00000000000..62f28b33cf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_OPT/aclwdrr003.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_OPT/test.desc new file mode 100644 index 00000000000..15df87102a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr003.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_ALL/aclwdrr003.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_ALL/aclwdrr003.c new file mode 100644 index 00000000000..62f28b33cf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_ALL/aclwdrr003.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_ALL/test.desc new file mode 100644 index 00000000000..7126336540e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr003.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_OPC/aclwdrr003.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_OPC/aclwdrr003.c new file mode 100644 index 00000000000..62f28b33cf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_OPC/aclwdrr003.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_OPC/test.desc new file mode 100644 index 00000000000..042b8c5d66b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr003.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_OPT/aclwdrr003.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_OPT/aclwdrr003.c new file mode 100644 index 00000000000..62f28b33cf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_OPT/aclwdrr003.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_OPT/test.desc new file mode 100644 index 00000000000..22cc7fb4dc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr003.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_SC_SAFE/aclwdrr003.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_SC_SAFE/aclwdrr003.c new file mode 100644 index 00000000000..62f28b33cf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_SC_SAFE/aclwdrr003.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_SC_SAFE/test.desc new file mode 100644 index 00000000000..984d297ca51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr003.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_ALL/aclwdrr003.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_ALL/aclwdrr003.c new file mode 100644 index 00000000000..62f28b33cf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_ALL/aclwdrr003.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_ALL/test.desc new file mode 100644 index 00000000000..1448b951fbf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr003.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_OPC/aclwdrr003.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_OPC/aclwdrr003.c new file mode 100644 index 00000000000..62f28b33cf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_OPC/aclwdrr003.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_OPC/test.desc new file mode 100644 index 00000000000..6901d4eb6cc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr003.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_OPT/aclwdrr003.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_OPT/aclwdrr003.c new file mode 100644 index 00000000000..62f28b33cf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_OPT/aclwdrr003.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_OPT/test.desc new file mode 100644 index 00000000000..8c0ab874b0d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr003_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr003.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_CAV11_ERROR/aclwdrr004.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_CAV11_ERROR/aclwdrr004.c new file mode 100644 index 00000000000..d1e4188f7a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_CAV11_ERROR/aclwdrr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..dff5b1f89b1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr004.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_ALL/aclwdrr004.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_ALL/aclwdrr004.c new file mode 100644 index 00000000000..d1e4188f7a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_ALL/aclwdrr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_ALL/test.desc new file mode 100644 index 00000000000..231c2d5318d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr004.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_OPC/aclwdrr004.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_OPC/aclwdrr004.c new file mode 100644 index 00000000000..d1e4188f7a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_OPC/aclwdrr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_OPC/test.desc new file mode 100644 index 00000000000..5983eb1468f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr004.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_OPT/aclwdrr004.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_OPT/aclwdrr004.c new file mode 100644 index 00000000000..d1e4188f7a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_OPT/aclwdrr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_OPT/test.desc new file mode 100644 index 00000000000..06a6e562ae4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr004.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_ALL/aclwdrr004.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_ALL/aclwdrr004.c new file mode 100644 index 00000000000..d1e4188f7a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_ALL/aclwdrr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_ALL/test.desc new file mode 100644 index 00000000000..dc7fa9a64a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr004.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_OPC/aclwdrr004.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_OPC/aclwdrr004.c new file mode 100644 index 00000000000..d1e4188f7a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_OPC/aclwdrr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_OPC/test.desc new file mode 100644 index 00000000000..ee1308ffbb2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr004.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_OPT/aclwdrr004.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_OPT/aclwdrr004.c new file mode 100644 index 00000000000..d1e4188f7a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_OPT/aclwdrr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_OPT/test.desc new file mode 100644 index 00000000000..2b89d796c33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr004.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_ALL/aclwdrr004.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_ALL/aclwdrr004.c new file mode 100644 index 00000000000..d1e4188f7a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_ALL/aclwdrr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_ALL/test.desc new file mode 100644 index 00000000000..f6fe41461a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr004.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_OPC/aclwdrr004.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_OPC/aclwdrr004.c new file mode 100644 index 00000000000..d1e4188f7a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_OPC/aclwdrr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_OPC/test.desc new file mode 100644 index 00000000000..9b2a07b760c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr004.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_OPT/aclwdrr004.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_OPT/aclwdrr004.c new file mode 100644 index 00000000000..d1e4188f7a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_OPT/aclwdrr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_OPT/test.desc new file mode 100644 index 00000000000..cc720d2605a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr004.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_SC_SAFE/aclwdrr004.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_SC_SAFE/aclwdrr004.c new file mode 100644 index 00000000000..d1e4188f7a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_SC_SAFE/aclwdrr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_SC_SAFE/test.desc new file mode 100644 index 00000000000..50cfa45dfad --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr004.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_ALL/aclwdrr004.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_ALL/aclwdrr004.c new file mode 100644 index 00000000000..d1e4188f7a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_ALL/aclwdrr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_ALL/test.desc new file mode 100644 index 00000000000..8208d280d77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr004.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_OPC/aclwdrr004.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_OPC/aclwdrr004.c new file mode 100644 index 00000000000..d1e4188f7a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_OPC/aclwdrr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_OPC/test.desc new file mode 100644 index 00000000000..8070eb166db --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr004.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_OPT/aclwdrr004.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_OPT/aclwdrr004.c new file mode 100644 index 00000000000..d1e4188f7a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_OPT/aclwdrr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_OPT/test.desc new file mode 100644 index 00000000000..f249be9788b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr004_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr004.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_CAV11_ERROR/aclwdrr005.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_CAV11_ERROR/aclwdrr005.c new file mode 100644 index 00000000000..1126c99fa24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_CAV11_ERROR/aclwdrr005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..ab814ed47e6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr005.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_ALL/aclwdrr005.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_ALL/aclwdrr005.c new file mode 100644 index 00000000000..1126c99fa24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_ALL/aclwdrr005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_ALL/test.desc new file mode 100644 index 00000000000..b4c228b9010 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr005.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_OPC/aclwdrr005.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_OPC/aclwdrr005.c new file mode 100644 index 00000000000..1126c99fa24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_OPC/aclwdrr005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_OPC/test.desc new file mode 100644 index 00000000000..2f9f05f1c50 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr005.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_OPT/aclwdrr005.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_OPT/aclwdrr005.c new file mode 100644 index 00000000000..1126c99fa24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_OPT/aclwdrr005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_OPT/test.desc new file mode 100644 index 00000000000..55415e0a2d7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr005.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_ALL/aclwdrr005.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_ALL/aclwdrr005.c new file mode 100644 index 00000000000..1126c99fa24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_ALL/aclwdrr005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_ALL/test.desc new file mode 100644 index 00000000000..5b9664a7bd9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr005.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_OPC/aclwdrr005.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_OPC/aclwdrr005.c new file mode 100644 index 00000000000..1126c99fa24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_OPC/aclwdrr005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_OPC/test.desc new file mode 100644 index 00000000000..9396c36ccde --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr005.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_OPT/aclwdrr005.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_OPT/aclwdrr005.c new file mode 100644 index 00000000000..1126c99fa24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_OPT/aclwdrr005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_OPT/test.desc new file mode 100644 index 00000000000..d5a56e918c1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr005.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_ALL/aclwdrr005.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_ALL/aclwdrr005.c new file mode 100644 index 00000000000..1126c99fa24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_ALL/aclwdrr005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_ALL/test.desc new file mode 100644 index 00000000000..d5988eb7598 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr005.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_OPC/aclwdrr005.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_OPC/aclwdrr005.c new file mode 100644 index 00000000000..1126c99fa24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_OPC/aclwdrr005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_OPC/test.desc new file mode 100644 index 00000000000..15bc5aa3a90 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr005.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_OPT/aclwdrr005.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_OPT/aclwdrr005.c new file mode 100644 index 00000000000..1126c99fa24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_OPT/aclwdrr005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_OPT/test.desc new file mode 100644 index 00000000000..28e44fd0d24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr005.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_SC_SAFE/aclwdrr005.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_SC_SAFE/aclwdrr005.c new file mode 100644 index 00000000000..1126c99fa24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_SC_SAFE/aclwdrr005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_SC_SAFE/test.desc new file mode 100644 index 00000000000..95758f8b320 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr005.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_ALL/aclwdrr005.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_ALL/aclwdrr005.c new file mode 100644 index 00000000000..1126c99fa24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_ALL/aclwdrr005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_ALL/test.desc new file mode 100644 index 00000000000..c2cd0d174f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr005.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_OPC/aclwdrr005.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_OPC/aclwdrr005.c new file mode 100644 index 00000000000..1126c99fa24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_OPC/aclwdrr005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_OPC/test.desc new file mode 100644 index 00000000000..a101b1ef918 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr005.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_OPT/aclwdrr005.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_OPT/aclwdrr005.c new file mode 100644 index 00000000000..1126c99fa24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_OPT/aclwdrr005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_OPT/test.desc new file mode 100644 index 00000000000..456e5811bb4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr005_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr005.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_CAV11_SAFE/aclwdrr006.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_CAV11_SAFE/aclwdrr006.c new file mode 100644 index 00000000000..6d88c2a297a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_CAV11_SAFE/aclwdrr006.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..4d9c0830ad1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr006.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_POWER_ALL/aclwdrr006.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_POWER_ALL/aclwdrr006.c new file mode 100644 index 00000000000..6d88c2a297a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_POWER_ALL/aclwdrr006.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_POWER_ALL/test.desc new file mode 100644 index 00000000000..38dfeda66c5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr006.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_POWER_OPC/aclwdrr006.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_POWER_OPC/aclwdrr006.c new file mode 100644 index 00000000000..6d88c2a297a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_POWER_OPC/aclwdrr006.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_POWER_OPC/test.desc new file mode 100644 index 00000000000..fac90b00885 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr006.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_POWER_OPT/test.desc index 828d4ff073c..c8f7fe38101 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk aclwdrr006.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_ALL/aclwdrr006.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_ALL/aclwdrr006.c new file mode 100644 index 00000000000..6d88c2a297a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_ALL/aclwdrr006.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_ALL/test.desc new file mode 100644 index 00000000000..bf914e02555 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr006.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_OPC/aclwdrr006.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_OPC/aclwdrr006.c new file mode 100644 index 00000000000..6d88c2a297a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_OPC/aclwdrr006.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_OPC/test.desc new file mode 100644 index 00000000000..9f47ab2ca6b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr006.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_OPT/aclwdrr006.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_OPT/aclwdrr006.c new file mode 100644 index 00000000000..6d88c2a297a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_OPT/aclwdrr006.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_OPT/test.desc new file mode 100644 index 00000000000..dd003e0a479 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr006.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_ALL/aclwdrr006.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_ALL/aclwdrr006.c new file mode 100644 index 00000000000..6d88c2a297a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_ALL/aclwdrr006.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_ALL/test.desc new file mode 100644 index 00000000000..53efe1bfa5b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr006.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_OPC/aclwdrr006.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_OPC/aclwdrr006.c new file mode 100644 index 00000000000..6d88c2a297a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_OPC/aclwdrr006.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_OPC/test.desc new file mode 100644 index 00000000000..8ac95b12667 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr006.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_OPT/aclwdrr006.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_OPT/aclwdrr006.c new file mode 100644 index 00000000000..6d88c2a297a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_OPT/aclwdrr006.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_OPT/test.desc new file mode 100644 index 00000000000..8166de2956a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr006.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_SC_SAFE/aclwdrr006.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_SC_SAFE/aclwdrr006.c new file mode 100644 index 00000000000..6d88c2a297a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_SC_SAFE/aclwdrr006.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_SC_SAFE/test.desc new file mode 100644 index 00000000000..0fd8ed1c043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr006.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_ALL/aclwdrr006.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_ALL/aclwdrr006.c new file mode 100644 index 00000000000..6d88c2a297a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_ALL/aclwdrr006.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_ALL/test.desc new file mode 100644 index 00000000000..77fca753a6c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +aclwdrr006.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_OPC/aclwdrr006.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_OPC/aclwdrr006.c new file mode 100644 index 00000000000..6d88c2a297a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_OPC/aclwdrr006.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_OPC/test.desc new file mode 100644 index 00000000000..c284f610454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +aclwdrr006.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_OPT/aclwdrr006.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_OPT/aclwdrr006.c new file mode 100644 index 00000000000..6d88c2a297a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_OPT/aclwdrr006.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_OPT/test.desc new file mode 100644 index 00000000000..6f51d592ce4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr006_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr006.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_CAV11_SAFE/aclwdrr007.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_CAV11_SAFE/aclwdrr007.c new file mode 100644 index 00000000000..c55d2e1161a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_CAV11_SAFE/aclwdrr007.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..940bb54c6b6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr007.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_ALL/aclwdrr007.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_ALL/aclwdrr007.c new file mode 100644 index 00000000000..c55d2e1161a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_ALL/aclwdrr007.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_ALL/test.desc new file mode 100644 index 00000000000..3c15ea583c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr007.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_OPC/aclwdrr007.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_OPC/aclwdrr007.c new file mode 100644 index 00000000000..c55d2e1161a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_OPC/aclwdrr007.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_OPC/test.desc new file mode 100644 index 00000000000..526cb710ee2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr007.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_OPT/aclwdrr007.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_OPT/aclwdrr007.c new file mode 100644 index 00000000000..c55d2e1161a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_OPT/aclwdrr007.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_OPT/test.desc new file mode 100644 index 00000000000..3599bee3f68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr007.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_ALL/aclwdrr007.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_ALL/aclwdrr007.c new file mode 100644 index 00000000000..c55d2e1161a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_ALL/aclwdrr007.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_ALL/test.desc new file mode 100644 index 00000000000..3087d954cfc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr007.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_OPC/aclwdrr007.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_OPC/aclwdrr007.c new file mode 100644 index 00000000000..c55d2e1161a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_OPC/aclwdrr007.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_OPC/test.desc new file mode 100644 index 00000000000..9a0fd5d36a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr007.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_OPT/aclwdrr007.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_OPT/aclwdrr007.c new file mode 100644 index 00000000000..c55d2e1161a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_OPT/aclwdrr007.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_OPT/test.desc new file mode 100644 index 00000000000..bd4c833cad1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr007.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_ALL/aclwdrr007.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_ALL/aclwdrr007.c new file mode 100644 index 00000000000..c55d2e1161a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_ALL/aclwdrr007.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_ALL/test.desc new file mode 100644 index 00000000000..c983e6ea39d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr007.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_OPC/aclwdrr007.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_OPC/aclwdrr007.c new file mode 100644 index 00000000000..c55d2e1161a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_OPC/aclwdrr007.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_OPC/test.desc new file mode 100644 index 00000000000..36dc6a20afc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr007.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_OPT/aclwdrr007.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_OPT/aclwdrr007.c new file mode 100644 index 00000000000..c55d2e1161a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_OPT/aclwdrr007.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_OPT/test.desc new file mode 100644 index 00000000000..b0d2a1153a9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr007.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_SC_SAFE/aclwdrr007.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_SC_SAFE/aclwdrr007.c new file mode 100644 index 00000000000..c55d2e1161a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_SC_SAFE/aclwdrr007.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_SC_SAFE/test.desc new file mode 100644 index 00000000000..0bddc898617 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr007.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_ALL/aclwdrr007.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_ALL/aclwdrr007.c new file mode 100644 index 00000000000..c55d2e1161a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_ALL/aclwdrr007.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_ALL/test.desc new file mode 100644 index 00000000000..942eb7136b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr007.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_OPC/aclwdrr007.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_OPC/aclwdrr007.c new file mode 100644 index 00000000000..c55d2e1161a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_OPC/aclwdrr007.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_OPC/test.desc new file mode 100644 index 00000000000..b4b18f06a49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr007.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_OPT/aclwdrr007.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_OPT/aclwdrr007.c new file mode 100644 index 00000000000..c55d2e1161a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_OPT/aclwdrr007.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_OPT/test.desc new file mode 100644 index 00000000000..67ea93f2ec9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr007_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr007.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_CAV11_ERROR/aclwdrr008.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_CAV11_ERROR/aclwdrr008.c new file mode 100644 index 00000000000..1bc4f29a252 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_CAV11_ERROR/aclwdrr008.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..b28f8f5cd20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr008.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_POWER_ALL/aclwdrr008.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_POWER_ALL/aclwdrr008.c new file mode 100644 index 00000000000..1bc4f29a252 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_POWER_ALL/aclwdrr008.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_POWER_ALL/test.desc new file mode 100644 index 00000000000..484e2b8dfb3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr008.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_POWER_OPC/aclwdrr008.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_POWER_OPC/aclwdrr008.c new file mode 100644 index 00000000000..1bc4f29a252 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_POWER_OPC/aclwdrr008.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_POWER_OPC/test.desc new file mode 100644 index 00000000000..c0103695d32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr008.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_POWER_OPT/test.desc index 116c2584958..ad6acd89c2e 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk aclwdrr008.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_ALL/aclwdrr008.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_ALL/aclwdrr008.c new file mode 100644 index 00000000000..1bc4f29a252 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_ALL/aclwdrr008.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_ALL/test.desc new file mode 100644 index 00000000000..5f977f46900 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr008.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_OPC/aclwdrr008.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_OPC/aclwdrr008.c new file mode 100644 index 00000000000..1bc4f29a252 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_OPC/aclwdrr008.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_OPC/test.desc new file mode 100644 index 00000000000..5067e7ae4c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr008.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_OPT/aclwdrr008.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_OPT/aclwdrr008.c new file mode 100644 index 00000000000..1bc4f29a252 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_OPT/aclwdrr008.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_OPT/test.desc new file mode 100644 index 00000000000..926e66b47c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr008.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_ALL/aclwdrr008.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_ALL/aclwdrr008.c new file mode 100644 index 00000000000..1bc4f29a252 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_ALL/aclwdrr008.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_ALL/test.desc new file mode 100644 index 00000000000..d214cf91181 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr008.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_OPC/aclwdrr008.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_OPC/aclwdrr008.c new file mode 100644 index 00000000000..1bc4f29a252 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_OPC/aclwdrr008.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_OPC/test.desc new file mode 100644 index 00000000000..869deee5afe --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr008.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_OPT/aclwdrr008.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_OPT/aclwdrr008.c new file mode 100644 index 00000000000..1bc4f29a252 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_OPT/aclwdrr008.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_OPT/test.desc new file mode 100644 index 00000000000..cf651e9e636 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr008.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_SC_SAFE/aclwdrr008.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_SC_SAFE/aclwdrr008.c new file mode 100644 index 00000000000..1bc4f29a252 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_SC_SAFE/aclwdrr008.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_SC_SAFE/test.desc new file mode 100644 index 00000000000..82b711d5240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr008.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_ALL/aclwdrr008.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_ALL/aclwdrr008.c new file mode 100644 index 00000000000..1bc4f29a252 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_ALL/aclwdrr008.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_ALL/test.desc new file mode 100644 index 00000000000..99d5e5bd254 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr008.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_OPC/aclwdrr008.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_OPC/aclwdrr008.c new file mode 100644 index 00000000000..1bc4f29a252 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_OPC/aclwdrr008.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_OPC/test.desc new file mode 100644 index 00000000000..debcccd4eaa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr008.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_OPT/aclwdrr008.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_OPT/aclwdrr008.c new file mode 100644 index 00000000000..1bc4f29a252 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_OPT/aclwdrr008.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_OPT/test.desc new file mode 100644 index 00000000000..a604fce354c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr008_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr008.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_CAV11_SAFE/aclwdrr009.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_CAV11_SAFE/aclwdrr009.c new file mode 100644 index 00000000000..ef2fcd3b06e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_CAV11_SAFE/aclwdrr009.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..9089f75fb7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr009.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_ALL/aclwdrr009.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_ALL/aclwdrr009.c new file mode 100644 index 00000000000..ef2fcd3b06e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_ALL/aclwdrr009.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_ALL/test.desc new file mode 100644 index 00000000000..5743ff5a532 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +aclwdrr009.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_OPC/aclwdrr009.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_OPC/aclwdrr009.c new file mode 100644 index 00000000000..ef2fcd3b06e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_OPC/aclwdrr009.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_OPC/test.desc new file mode 100644 index 00000000000..53a7d516a1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +aclwdrr009.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_OPT/aclwdrr009.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_OPT/aclwdrr009.c new file mode 100644 index 00000000000..ef2fcd3b06e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_OPT/aclwdrr009.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_OPT/test.desc new file mode 100644 index 00000000000..d5b575d1730 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +aclwdrr009.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_ALL/aclwdrr009.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_ALL/aclwdrr009.c new file mode 100644 index 00000000000..ef2fcd3b06e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_ALL/aclwdrr009.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_ALL/test.desc new file mode 100644 index 00000000000..025dee6bcdf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr009.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_OPC/aclwdrr009.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_OPC/aclwdrr009.c new file mode 100644 index 00000000000..ef2fcd3b06e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_OPC/aclwdrr009.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_OPC/test.desc new file mode 100644 index 00000000000..4dda8d7449a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr009.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_OPT/aclwdrr009.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_OPT/aclwdrr009.c new file mode 100644 index 00000000000..ef2fcd3b06e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_OPT/aclwdrr009.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_OPT/test.desc new file mode 100644 index 00000000000..8895c6dd53e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr009.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_ALL/aclwdrr009.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_ALL/aclwdrr009.c new file mode 100644 index 00000000000..ef2fcd3b06e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_ALL/aclwdrr009.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_ALL/test.desc new file mode 100644 index 00000000000..7df1cf4da96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr009.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_OPC/aclwdrr009.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_OPC/aclwdrr009.c new file mode 100644 index 00000000000..ef2fcd3b06e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_OPC/aclwdrr009.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_OPC/test.desc new file mode 100644 index 00000000000..9beb06f853a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr009.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_OPT/aclwdrr009.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_OPT/aclwdrr009.c new file mode 100644 index 00000000000..ef2fcd3b06e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_OPT/aclwdrr009.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_OPT/test.desc new file mode 100644 index 00000000000..555d026fd14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr009.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_SC_SAFE/aclwdrr009.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_SC_SAFE/aclwdrr009.c new file mode 100644 index 00000000000..ef2fcd3b06e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_SC_SAFE/aclwdrr009.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_SC_SAFE/test.desc new file mode 100644 index 00000000000..d4c4bb9db3d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr009.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_ALL/aclwdrr009.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_ALL/aclwdrr009.c new file mode 100644 index 00000000000..ef2fcd3b06e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_ALL/aclwdrr009.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_ALL/test.desc new file mode 100644 index 00000000000..b1be794100d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr009.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_OPC/aclwdrr009.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_OPC/aclwdrr009.c new file mode 100644 index 00000000000..ef2fcd3b06e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_OPC/aclwdrr009.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_OPC/test.desc new file mode 100644 index 00000000000..150bf829910 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr009.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_OPT/aclwdrr009.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_OPT/aclwdrr009.c new file mode 100644 index 00000000000..ef2fcd3b06e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_OPT/aclwdrr009.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_OPT/test.desc new file mode 100644 index 00000000000..40a28de897d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr009_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr009.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_CAV11_ERROR/aclwdrr010.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_CAV11_ERROR/aclwdrr010.c new file mode 100644 index 00000000000..832ad4679c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_CAV11_ERROR/aclwdrr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..20c2ab98107 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr010.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_POWER_ALL/aclwdrr010.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_POWER_ALL/aclwdrr010.c new file mode 100644 index 00000000000..832ad4679c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_POWER_ALL/aclwdrr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_POWER_ALL/test.desc new file mode 100644 index 00000000000..a5e5ad0480c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr010.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_POWER_OPC/aclwdrr010.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_POWER_OPC/aclwdrr010.c new file mode 100644 index 00000000000..832ad4679c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_POWER_OPC/aclwdrr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_POWER_OPC/test.desc new file mode 100644 index 00000000000..77c0ef57620 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr010.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_POWER_OPT/test.desc index 2ff2ea749c1..140bd52ac36 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk aclwdrr010.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_ALL/aclwdrr010.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_ALL/aclwdrr010.c new file mode 100644 index 00000000000..832ad4679c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_ALL/aclwdrr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_ALL/test.desc new file mode 100644 index 00000000000..3d48c501542 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr010.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_OPC/aclwdrr010.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_OPC/aclwdrr010.c new file mode 100644 index 00000000000..832ad4679c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_OPC/aclwdrr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_OPC/test.desc new file mode 100644 index 00000000000..f263ed78225 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr010.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_OPT/aclwdrr010.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_OPT/aclwdrr010.c new file mode 100644 index 00000000000..832ad4679c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_OPT/aclwdrr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_OPT/test.desc new file mode 100644 index 00000000000..2b3aa700004 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr010.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_ALL/aclwdrr010.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_ALL/aclwdrr010.c new file mode 100644 index 00000000000..832ad4679c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_ALL/aclwdrr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_ALL/test.desc new file mode 100644 index 00000000000..d3c42bf1391 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr010.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_OPC/aclwdrr010.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_OPC/aclwdrr010.c new file mode 100644 index 00000000000..832ad4679c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_OPC/aclwdrr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_OPC/test.desc new file mode 100644 index 00000000000..a7473cf5220 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr010.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_OPT/aclwdrr010.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_OPT/aclwdrr010.c new file mode 100644 index 00000000000..832ad4679c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_OPT/aclwdrr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_OPT/test.desc new file mode 100644 index 00000000000..13058a3e61e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr010.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_SC_SAFE/aclwdrr010.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_SC_SAFE/aclwdrr010.c new file mode 100644 index 00000000000..832ad4679c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_SC_SAFE/aclwdrr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_SC_SAFE/test.desc new file mode 100644 index 00000000000..63f185b9f60 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr010.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_ALL/aclwdrr010.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_ALL/aclwdrr010.c new file mode 100644 index 00000000000..832ad4679c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_ALL/aclwdrr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_ALL/test.desc new file mode 100644 index 00000000000..adf6bae3bd8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr010.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_OPC/aclwdrr010.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_OPC/aclwdrr010.c new file mode 100644 index 00000000000..832ad4679c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_OPC/aclwdrr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_OPC/test.desc new file mode 100644 index 00000000000..311e41891c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr010.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_OPT/aclwdrr010.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_OPT/aclwdrr010.c new file mode 100644 index 00000000000..832ad4679c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_OPT/aclwdrr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_OPT/test.desc new file mode 100644 index 00000000000..eba16ef06f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr010_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr010.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_CAV11_ERROR/aclwdrr011.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_CAV11_ERROR/aclwdrr011.c new file mode 100644 index 00000000000..f69393121a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_CAV11_ERROR/aclwdrr011.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..738bf967a8f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr011.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_POWER_ALL/aclwdrr011.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_POWER_ALL/aclwdrr011.c new file mode 100644 index 00000000000..f69393121a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_POWER_ALL/aclwdrr011.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_POWER_ALL/test.desc new file mode 100644 index 00000000000..a5f92c55868 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr011.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_POWER_OPC/aclwdrr011.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_POWER_OPC/aclwdrr011.c new file mode 100644 index 00000000000..f69393121a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_POWER_OPC/aclwdrr011.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_POWER_OPC/test.desc new file mode 100644 index 00000000000..dfdc1ed3b5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr011.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_POWER_OPT/test.desc index a882f6d6be5..708b8a18074 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk aclwdrr011.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_ALL/aclwdrr011.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_ALL/aclwdrr011.c new file mode 100644 index 00000000000..f69393121a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_ALL/aclwdrr011.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_ALL/test.desc new file mode 100644 index 00000000000..98c3eb55ae9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr011.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_OPC/aclwdrr011.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_OPC/aclwdrr011.c new file mode 100644 index 00000000000..f69393121a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_OPC/aclwdrr011.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_OPC/test.desc new file mode 100644 index 00000000000..21a8529819c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr011.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_OPT/aclwdrr011.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_OPT/aclwdrr011.c new file mode 100644 index 00000000000..f69393121a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_OPT/aclwdrr011.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_OPT/test.desc new file mode 100644 index 00000000000..787118bcfbb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr011.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_ALL/aclwdrr011.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_ALL/aclwdrr011.c new file mode 100644 index 00000000000..f69393121a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_ALL/aclwdrr011.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_ALL/test.desc new file mode 100644 index 00000000000..d5faf5b91f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr011.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_OPC/aclwdrr011.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_OPC/aclwdrr011.c new file mode 100644 index 00000000000..f69393121a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_OPC/aclwdrr011.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_OPC/test.desc new file mode 100644 index 00000000000..e909947a47d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr011.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_OPT/aclwdrr011.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_OPT/aclwdrr011.c new file mode 100644 index 00000000000..f69393121a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_OPT/aclwdrr011.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_OPT/test.desc new file mode 100644 index 00000000000..39b3c080d48 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr011.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_SC_SAFE/aclwdrr011.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_SC_SAFE/aclwdrr011.c new file mode 100644 index 00000000000..f69393121a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_SC_SAFE/aclwdrr011.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_SC_SAFE/test.desc new file mode 100644 index 00000000000..031a4765340 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr011.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_ALL/aclwdrr011.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_ALL/aclwdrr011.c new file mode 100644 index 00000000000..f69393121a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_ALL/aclwdrr011.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_ALL/test.desc new file mode 100644 index 00000000000..811b0881cfb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr011.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_OPC/aclwdrr011.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_OPC/aclwdrr011.c new file mode 100644 index 00000000000..f69393121a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_OPC/aclwdrr011.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_OPC/test.desc new file mode 100644 index 00000000000..df2ccacccd1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr011.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_OPT/aclwdrr011.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_OPT/aclwdrr011.c new file mode 100644 index 00000000000..f69393121a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_OPT/aclwdrr011.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_OPT/test.desc new file mode 100644 index 00000000000..36fb607da51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr011_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr011.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_CAV11_SAFE/aclwdrr012.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_CAV11_SAFE/aclwdrr012.c new file mode 100644 index 00000000000..a7f773d846f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_CAV11_SAFE/aclwdrr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..6b5d43a5181 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr012.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_ALL/aclwdrr012.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_ALL/aclwdrr012.c new file mode 100644 index 00000000000..a7f773d846f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_ALL/aclwdrr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_ALL/test.desc new file mode 100644 index 00000000000..b1b983d16ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr012.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_OPC/aclwdrr012.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_OPC/aclwdrr012.c new file mode 100644 index 00000000000..a7f773d846f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_OPC/aclwdrr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_OPC/test.desc new file mode 100644 index 00000000000..04e96d8f16a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr012.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_OPT/aclwdrr012.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_OPT/aclwdrr012.c new file mode 100644 index 00000000000..a7f773d846f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_OPT/aclwdrr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_OPT/test.desc new file mode 100644 index 00000000000..b5a07b1f057 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr012.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_ALL/aclwdrr012.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_ALL/aclwdrr012.c new file mode 100644 index 00000000000..a7f773d846f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_ALL/aclwdrr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_ALL/test.desc new file mode 100644 index 00000000000..26cf2bed1ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr012.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_OPC/aclwdrr012.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_OPC/aclwdrr012.c new file mode 100644 index 00000000000..a7f773d846f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_OPC/aclwdrr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_OPC/test.desc new file mode 100644 index 00000000000..f0006e18341 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr012.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_OPT/aclwdrr012.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_OPT/aclwdrr012.c new file mode 100644 index 00000000000..a7f773d846f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_OPT/aclwdrr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_OPT/test.desc new file mode 100644 index 00000000000..d82e0376f16 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr012.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_ALL/aclwdrr012.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_ALL/aclwdrr012.c new file mode 100644 index 00000000000..a7f773d846f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_ALL/aclwdrr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_ALL/test.desc new file mode 100644 index 00000000000..14c602386f3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr012.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_OPC/aclwdrr012.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_OPC/aclwdrr012.c new file mode 100644 index 00000000000..a7f773d846f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_OPC/aclwdrr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_OPC/test.desc new file mode 100644 index 00000000000..6f051d71999 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr012.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_OPT/aclwdrr012.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_OPT/aclwdrr012.c new file mode 100644 index 00000000000..a7f773d846f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_OPT/aclwdrr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_OPT/test.desc new file mode 100644 index 00000000000..0d270c29d87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr012.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_SC_SAFE/aclwdrr012.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_SC_SAFE/aclwdrr012.c new file mode 100644 index 00000000000..a7f773d846f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_SC_SAFE/aclwdrr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_SC_SAFE/test.desc new file mode 100644 index 00000000000..52879c0ce9c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr012.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_ALL/aclwdrr012.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_ALL/aclwdrr012.c new file mode 100644 index 00000000000..a7f773d846f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_ALL/aclwdrr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_ALL/test.desc new file mode 100644 index 00000000000..ab75a241a68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr012.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_OPC/aclwdrr012.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_OPC/aclwdrr012.c new file mode 100644 index 00000000000..a7f773d846f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_OPC/aclwdrr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_OPC/test.desc new file mode 100644 index 00000000000..6d4d366d2c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr012.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_OPT/aclwdrr012.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_OPT/aclwdrr012.c new file mode 100644 index 00000000000..a7f773d846f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_OPT/aclwdrr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_OPT/test.desc new file mode 100644 index 00000000000..814b4ee36a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr012_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr012.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_CAV11_SAFE/aclwdrr013.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_CAV11_SAFE/aclwdrr013.c new file mode 100644 index 00000000000..cc353386146 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_CAV11_SAFE/aclwdrr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..61f0258d13c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr013.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_POWER_ALL/aclwdrr013.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_POWER_ALL/aclwdrr013.c new file mode 100644 index 00000000000..cc353386146 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_POWER_ALL/aclwdrr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_POWER_ALL/test.desc new file mode 100644 index 00000000000..33c79028f63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr013.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_POWER_OPC/aclwdrr013.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_POWER_OPC/aclwdrr013.c new file mode 100644 index 00000000000..cc353386146 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_POWER_OPC/aclwdrr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_POWER_OPC/test.desc new file mode 100644 index 00000000000..9d9ec263839 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr013.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_POWER_OPT/test.desc index 2545fa72c52..3554464976e 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk aclwdrr013.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_ALL/aclwdrr013.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_ALL/aclwdrr013.c new file mode 100644 index 00000000000..cc353386146 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_ALL/aclwdrr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_ALL/test.desc new file mode 100644 index 00000000000..14c17319428 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr013.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_OPC/aclwdrr013.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_OPC/aclwdrr013.c new file mode 100644 index 00000000000..cc353386146 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_OPC/aclwdrr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_OPC/test.desc new file mode 100644 index 00000000000..5ee7f72f679 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr013.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_OPT/aclwdrr013.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_OPT/aclwdrr013.c new file mode 100644 index 00000000000..cc353386146 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_OPT/aclwdrr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_OPT/test.desc new file mode 100644 index 00000000000..d8ce9ea43f3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr013.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_ALL/aclwdrr013.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_ALL/aclwdrr013.c new file mode 100644 index 00000000000..cc353386146 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_ALL/aclwdrr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_ALL/test.desc new file mode 100644 index 00000000000..f0ef9601f10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr013.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_OPC/aclwdrr013.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_OPC/aclwdrr013.c new file mode 100644 index 00000000000..cc353386146 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_OPC/aclwdrr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_OPC/test.desc new file mode 100644 index 00000000000..ed173860e2b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr013.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_OPT/aclwdrr013.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_OPT/aclwdrr013.c new file mode 100644 index 00000000000..cc353386146 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_OPT/aclwdrr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_OPT/test.desc new file mode 100644 index 00000000000..bac9e768aa5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr013.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_SC_SAFE/aclwdrr013.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_SC_SAFE/aclwdrr013.c new file mode 100644 index 00000000000..cc353386146 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_SC_SAFE/aclwdrr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_SC_SAFE/test.desc new file mode 100644 index 00000000000..ea1e10e4226 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr013.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_ALL/aclwdrr013.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_ALL/aclwdrr013.c new file mode 100644 index 00000000000..cc353386146 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_ALL/aclwdrr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_ALL/test.desc new file mode 100644 index 00000000000..f21299e192b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr013.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_OPC/aclwdrr013.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_OPC/aclwdrr013.c new file mode 100644 index 00000000000..cc353386146 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_OPC/aclwdrr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_OPC/test.desc new file mode 100644 index 00000000000..eb0514b7e01 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr013.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_OPT/aclwdrr013.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_OPT/aclwdrr013.c new file mode 100644 index 00000000000..cc353386146 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_OPT/aclwdrr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_OPT/test.desc new file mode 100644 index 00000000000..cef45790124 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr013_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr013.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_CAV11_ERROR/aclwdrr014.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_CAV11_ERROR/aclwdrr014.c new file mode 100644 index 00000000000..623e1a8ddc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_CAV11_ERROR/aclwdrr014.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..b39bba38f87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr014.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_ALL/aclwdrr014.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_ALL/aclwdrr014.c new file mode 100644 index 00000000000..623e1a8ddc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_ALL/aclwdrr014.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_ALL/test.desc new file mode 100644 index 00000000000..51e7531e1c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr014.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_OPC/aclwdrr014.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_OPC/aclwdrr014.c new file mode 100644 index 00000000000..623e1a8ddc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_OPC/aclwdrr014.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_OPC/test.desc new file mode 100644 index 00000000000..fd5c2e7e258 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr014.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_OPT/aclwdrr014.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_OPT/aclwdrr014.c new file mode 100644 index 00000000000..623e1a8ddc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_OPT/aclwdrr014.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_OPT/test.desc new file mode 100644 index 00000000000..a4130b448c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr014.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_ALL/aclwdrr014.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_ALL/aclwdrr014.c new file mode 100644 index 00000000000..623e1a8ddc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_ALL/aclwdrr014.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_ALL/test.desc new file mode 100644 index 00000000000..26600be1ddf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr014.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_OPC/aclwdrr014.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_OPC/aclwdrr014.c new file mode 100644 index 00000000000..623e1a8ddc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_OPC/aclwdrr014.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_OPC/test.desc new file mode 100644 index 00000000000..407e2a0982a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr014.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_OPT/aclwdrr014.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_OPT/aclwdrr014.c new file mode 100644 index 00000000000..623e1a8ddc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_OPT/aclwdrr014.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_OPT/test.desc new file mode 100644 index 00000000000..4a304a81cf8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr014.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_ALL/aclwdrr014.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_ALL/aclwdrr014.c new file mode 100644 index 00000000000..623e1a8ddc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_ALL/aclwdrr014.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_ALL/test.desc new file mode 100644 index 00000000000..39e6dd18f67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr014.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_OPC/aclwdrr014.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_OPC/aclwdrr014.c new file mode 100644 index 00000000000..623e1a8ddc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_OPC/aclwdrr014.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_OPC/test.desc new file mode 100644 index 00000000000..a499daa1796 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr014.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_OPT/aclwdrr014.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_OPT/aclwdrr014.c new file mode 100644 index 00000000000..623e1a8ddc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_OPT/aclwdrr014.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_OPT/test.desc new file mode 100644 index 00000000000..45c2b3d6359 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr014.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_SC_SAFE/aclwdrr014.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_SC_SAFE/aclwdrr014.c new file mode 100644 index 00000000000..623e1a8ddc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_SC_SAFE/aclwdrr014.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_SC_SAFE/test.desc new file mode 100644 index 00000000000..f585b0c170e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr014.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_ALL/aclwdrr014.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_ALL/aclwdrr014.c new file mode 100644 index 00000000000..623e1a8ddc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_ALL/aclwdrr014.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_ALL/test.desc new file mode 100644 index 00000000000..e5f4864530c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr014.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_OPC/aclwdrr014.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_OPC/aclwdrr014.c new file mode 100644 index 00000000000..623e1a8ddc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_OPC/aclwdrr014.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_OPC/test.desc new file mode 100644 index 00000000000..ea5ce210163 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr014.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_OPT/aclwdrr014.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_OPT/aclwdrr014.c new file mode 100644 index 00000000000..623e1a8ddc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_OPT/aclwdrr014.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_OPT/test.desc new file mode 100644 index 00000000000..f48b0a688b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr014_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr014.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_CAV11_ERROR/aclwdrr015.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_CAV11_ERROR/aclwdrr015.c new file mode 100644 index 00000000000..1c54963778f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_CAV11_ERROR/aclwdrr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..f68d19b9252 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr015.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_ALL/aclwdrr015.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_ALL/aclwdrr015.c new file mode 100644 index 00000000000..1c54963778f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_ALL/aclwdrr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_ALL/test.desc new file mode 100644 index 00000000000..eac61a892ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr015.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_OPC/aclwdrr015.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_OPC/aclwdrr015.c new file mode 100644 index 00000000000..1c54963778f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_OPC/aclwdrr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_OPC/test.desc new file mode 100644 index 00000000000..46eac8210e1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr015.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_OPT/aclwdrr015.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_OPT/aclwdrr015.c new file mode 100644 index 00000000000..1c54963778f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_OPT/aclwdrr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_OPT/test.desc new file mode 100644 index 00000000000..1c09f7375af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr015.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_ALL/aclwdrr015.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_ALL/aclwdrr015.c new file mode 100644 index 00000000000..1c54963778f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_ALL/aclwdrr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_ALL/test.desc new file mode 100644 index 00000000000..606dbd472e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr015.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_OPC/aclwdrr015.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_OPC/aclwdrr015.c new file mode 100644 index 00000000000..1c54963778f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_OPC/aclwdrr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_OPC/test.desc new file mode 100644 index 00000000000..2e1e848f760 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr015.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_OPT/aclwdrr015.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_OPT/aclwdrr015.c new file mode 100644 index 00000000000..1c54963778f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_OPT/aclwdrr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_OPT/test.desc new file mode 100644 index 00000000000..9ec942db1f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr015.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_ALL/aclwdrr015.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_ALL/aclwdrr015.c new file mode 100644 index 00000000000..1c54963778f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_ALL/aclwdrr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_ALL/test.desc new file mode 100644 index 00000000000..88ee0158050 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr015.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_OPC/aclwdrr015.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_OPC/aclwdrr015.c new file mode 100644 index 00000000000..1c54963778f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_OPC/aclwdrr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_OPC/test.desc new file mode 100644 index 00000000000..88143cc79e5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr015.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_OPT/aclwdrr015.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_OPT/aclwdrr015.c new file mode 100644 index 00000000000..1c54963778f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_OPT/aclwdrr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_OPT/test.desc new file mode 100644 index 00000000000..f13a41601cc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr015.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_SC_SAFE/aclwdrr015.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_SC_SAFE/aclwdrr015.c new file mode 100644 index 00000000000..1c54963778f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_SC_SAFE/aclwdrr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_SC_SAFE/test.desc new file mode 100644 index 00000000000..28ca98930aa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwdrr015.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_ALL/aclwdrr015.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_ALL/aclwdrr015.c new file mode 100644 index 00000000000..1c54963778f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_ALL/aclwdrr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_ALL/test.desc new file mode 100644 index 00000000000..6171e25d9ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr015.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_OPC/aclwdrr015.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_OPC/aclwdrr015.c new file mode 100644 index 00000000000..1c54963778f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_OPC/aclwdrr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_OPC/test.desc new file mode 100644 index 00000000000..32ea7ec4a4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwdrr015.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_OPT/aclwdrr015.c b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_OPT/aclwdrr015.c new file mode 100644 index 00000000000..1c54963778f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_OPT/aclwdrr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_OPT/test.desc new file mode 100644 index 00000000000..9a8fb234c8b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwdrr015_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwdrr015.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_CAV11_ERROR/aclwsrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_CAV11_ERROR/aclwsrr000.c new file mode 100644 index 00000000000..9014ba04465 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_CAV11_ERROR/aclwsrr000.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..811c18fad24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwsrr000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_ALL/aclwsrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_ALL/aclwsrr000.c new file mode 100644 index 00000000000..9014ba04465 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_ALL/aclwsrr000.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_ALL/test.desc new file mode 100644 index 00000000000..f5f055f8ddb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwsrr000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_OPC/aclwsrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_OPC/aclwsrr000.c new file mode 100644 index 00000000000..9014ba04465 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_OPC/aclwsrr000.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_OPC/test.desc new file mode 100644 index 00000000000..cfed5f170fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwsrr000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_OPT/aclwsrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_OPT/aclwsrr000.c new file mode 100644 index 00000000000..9014ba04465 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_OPT/aclwsrr000.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_OPT/test.desc new file mode 100644 index 00000000000..69b2c5b9ed0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwsrr000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_ALL/aclwsrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_ALL/aclwsrr000.c new file mode 100644 index 00000000000..9014ba04465 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_ALL/aclwsrr000.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_ALL/test.desc new file mode 100644 index 00000000000..d20f7363c6b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwsrr000.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_OPC/aclwsrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_OPC/aclwsrr000.c new file mode 100644 index 00000000000..9014ba04465 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_OPC/aclwsrr000.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_OPC/test.desc new file mode 100644 index 00000000000..4931284c752 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwsrr000.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_OPT/aclwsrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_OPT/aclwsrr000.c new file mode 100644 index 00000000000..9014ba04465 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_OPT/aclwsrr000.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_OPT/test.desc new file mode 100644 index 00000000000..e93cfa04443 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwsrr000.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_ALL/aclwsrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_ALL/aclwsrr000.c new file mode 100644 index 00000000000..9014ba04465 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_ALL/aclwsrr000.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_ALL/test.desc new file mode 100644 index 00000000000..fc44a1bd08a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwsrr000.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_OPC/aclwsrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_OPC/aclwsrr000.c new file mode 100644 index 00000000000..9014ba04465 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_OPC/aclwsrr000.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_OPC/test.desc new file mode 100644 index 00000000000..ed83175c808 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwsrr000.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_OPT/aclwsrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_OPT/aclwsrr000.c new file mode 100644 index 00000000000..9014ba04465 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_OPT/aclwsrr000.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_OPT/test.desc new file mode 100644 index 00000000000..521ab2ce883 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwsrr000.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_SC_SAFE/aclwsrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_SC_SAFE/aclwsrr000.c new file mode 100644 index 00000000000..9014ba04465 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_SC_SAFE/aclwsrr000.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_SC_SAFE/test.desc new file mode 100644 index 00000000000..a82553e706e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwsrr000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_ALL/aclwsrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_ALL/aclwsrr000.c new file mode 100644 index 00000000000..9014ba04465 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_ALL/aclwsrr000.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_ALL/test.desc new file mode 100644 index 00000000000..c78a34368da --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwsrr000.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_OPC/aclwsrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_OPC/aclwsrr000.c new file mode 100644 index 00000000000..9014ba04465 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_OPC/aclwsrr000.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_OPC/test.desc new file mode 100644 index 00000000000..ff16250b891 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwsrr000.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_OPT/aclwsrr000.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_OPT/aclwsrr000.c new file mode 100644 index 00000000000..9014ba04465 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_OPT/aclwsrr000.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 2 && __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_OPT/test.desc new file mode 100644 index 00000000000..08f26113238 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwsrr000.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_CAV11_ERROR/aclwsrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_CAV11_ERROR/aclwsrr001.c new file mode 100644 index 00000000000..59e862b7a28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_CAV11_ERROR/aclwsrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..ec731d85588 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwsrr001.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_ALL/aclwsrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_ALL/aclwsrr001.c new file mode 100644 index 00000000000..59e862b7a28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_ALL/aclwsrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_ALL/test.desc new file mode 100644 index 00000000000..c77804758d8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwsrr001.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_OPC/aclwsrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_OPC/aclwsrr001.c new file mode 100644 index 00000000000..59e862b7a28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_OPC/aclwsrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_OPC/test.desc new file mode 100644 index 00000000000..293059ec0ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwsrr001.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_OPT/aclwsrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_OPT/aclwsrr001.c new file mode 100644 index 00000000000..59e862b7a28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_OPT/aclwsrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_OPT/test.desc new file mode 100644 index 00000000000..6f570dedf7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwsrr001.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_ALL/aclwsrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_ALL/aclwsrr001.c new file mode 100644 index 00000000000..59e862b7a28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_ALL/aclwsrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_ALL/test.desc new file mode 100644 index 00000000000..8e12ff4f828 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwsrr001.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_OPC/aclwsrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_OPC/aclwsrr001.c new file mode 100644 index 00000000000..59e862b7a28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_OPC/aclwsrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_OPC/test.desc new file mode 100644 index 00000000000..009dc71e6a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwsrr001.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_OPT/aclwsrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_OPT/aclwsrr001.c new file mode 100644 index 00000000000..59e862b7a28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_OPT/aclwsrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_OPT/test.desc new file mode 100644 index 00000000000..0882c613947 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwsrr001.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_ALL/aclwsrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_ALL/aclwsrr001.c new file mode 100644 index 00000000000..59e862b7a28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_ALL/aclwsrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_ALL/test.desc new file mode 100644 index 00000000000..3d1ee3c10eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwsrr001.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_OPC/aclwsrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_OPC/aclwsrr001.c new file mode 100644 index 00000000000..59e862b7a28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_OPC/aclwsrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_OPC/test.desc new file mode 100644 index 00000000000..c9c74be4a90 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwsrr001.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_OPT/aclwsrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_OPT/aclwsrr001.c new file mode 100644 index 00000000000..59e862b7a28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_OPT/aclwsrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_OPT/test.desc new file mode 100644 index 00000000000..0183ab13d16 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwsrr001.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_SC_SAFE/aclwsrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_SC_SAFE/aclwsrr001.c new file mode 100644 index 00000000000..59e862b7a28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_SC_SAFE/aclwsrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_SC_SAFE/test.desc new file mode 100644 index 00000000000..377f88c3b24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwsrr001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_ALL/aclwsrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_ALL/aclwsrr001.c new file mode 100644 index 00000000000..59e862b7a28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_ALL/aclwsrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_ALL/test.desc new file mode 100644 index 00000000000..20f62cd5c20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwsrr001.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_OPC/aclwsrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_OPC/aclwsrr001.c new file mode 100644 index 00000000000..59e862b7a28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_OPC/aclwsrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_OPC/test.desc new file mode 100644 index 00000000000..e3f09f60146 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwsrr001.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_OPT/aclwsrr001.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_OPT/aclwsrr001.c new file mode 100644 index 00000000000..59e862b7a28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_OPT/aclwsrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_OPT/test.desc new file mode 100644 index 00000000000..31642505d14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwsrr001.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_CAV11_SAFE/aclwsrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_CAV11_SAFE/aclwsrr002.c new file mode 100644 index 00000000000..47719b99fb3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_CAV11_SAFE/aclwsrr002.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..6cf8f374c9a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwsrr002.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_ALL/aclwsrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_ALL/aclwsrr002.c new file mode 100644 index 00000000000..47719b99fb3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_ALL/aclwsrr002.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_ALL/test.desc new file mode 100644 index 00000000000..19024d01163 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwsrr002.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_OPC/aclwsrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_OPC/aclwsrr002.c new file mode 100644 index 00000000000..47719b99fb3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_OPC/aclwsrr002.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_OPC/test.desc new file mode 100644 index 00000000000..1b1bb7b3dc1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwsrr002.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_OPT/test.desc index b27703fd10b..1f388d4182e 100644 --- a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk aclwsrr002.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_ALL/aclwsrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_ALL/aclwsrr002.c new file mode 100644 index 00000000000..47719b99fb3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_ALL/aclwsrr002.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_ALL/test.desc new file mode 100644 index 00000000000..97e680ba1c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwsrr002.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_OPC/aclwsrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_OPC/aclwsrr002.c new file mode 100644 index 00000000000..47719b99fb3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_OPC/aclwsrr002.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_OPC/test.desc new file mode 100644 index 00000000000..208c254eff4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwsrr002.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_OPT/aclwsrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_OPT/aclwsrr002.c new file mode 100644 index 00000000000..47719b99fb3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_OPT/aclwsrr002.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_OPT/test.desc new file mode 100644 index 00000000000..9f9a7fb1219 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwsrr002.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_ALL/aclwsrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_ALL/aclwsrr002.c new file mode 100644 index 00000000000..47719b99fb3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_ALL/aclwsrr002.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_ALL/test.desc new file mode 100644 index 00000000000..bfb72b0a88e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwsrr002.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_OPC/aclwsrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_OPC/aclwsrr002.c new file mode 100644 index 00000000000..47719b99fb3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_OPC/aclwsrr002.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_OPC/test.desc new file mode 100644 index 00000000000..3abd1175269 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwsrr002.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_OPT/aclwsrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_OPT/aclwsrr002.c new file mode 100644 index 00000000000..47719b99fb3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_OPT/aclwsrr002.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_OPT/test.desc new file mode 100644 index 00000000000..a9b5491d11b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwsrr002.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_SC_SAFE/aclwsrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_SC_SAFE/aclwsrr002.c new file mode 100644 index 00000000000..47719b99fb3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_SC_SAFE/aclwsrr002.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_SC_SAFE/test.desc new file mode 100644 index 00000000000..d75d722a11f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +aclwsrr002.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_ALL/aclwsrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_ALL/aclwsrr002.c new file mode 100644 index 00000000000..47719b99fb3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_ALL/aclwsrr002.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_ALL/test.desc new file mode 100644 index 00000000000..88d9ca51d06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwsrr002.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_OPC/aclwsrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_OPC/aclwsrr002.c new file mode 100644 index 00000000000..47719b99fb3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_OPC/aclwsrr002.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_OPC/test.desc new file mode 100644 index 00000000000..8235c14d4cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +aclwsrr002.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_OPT/aclwsrr002.c b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_OPT/aclwsrr002.c new file mode 100644 index 00000000000..47719b99fb3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_OPT/aclwsrr002.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_OPT/test.desc new file mode 100644 index 00000000000..66fb914d432 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_aclwsrr002_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +aclwsrr002.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_CAV11_ERROR/bclwdww000.c b/regression/goto-instrument-wmm-core/ppc_bclwdww000_CAV11_ERROR/bclwdww000.c new file mode 100644 index 00000000000..2919c33539e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_CAV11_ERROR/bclwdww000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..680b7771670 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_ALL/bclwdww000.c b/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_ALL/bclwdww000.c new file mode 100644 index 00000000000..2919c33539e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_ALL/bclwdww000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_ALL/test.desc new file mode 100644 index 00000000000..c2d840c62fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_OPC/bclwdww000.c b/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_OPC/bclwdww000.c new file mode 100644 index 00000000000..2919c33539e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_OPC/bclwdww000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_OPC/test.desc new file mode 100644 index 00000000000..b26363e18eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_OPT/bclwdww000.c b/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_OPT/bclwdww000.c new file mode 100644 index 00000000000..2919c33539e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_OPT/bclwdww000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_OPT/test.desc new file mode 100644 index 00000000000..4e64cd740a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_ALL/bclwdww000.c b/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_ALL/bclwdww000.c new file mode 100644 index 00000000000..2919c33539e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_ALL/bclwdww000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_ALL/test.desc new file mode 100644 index 00000000000..649f09feee6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww000.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_OPC/bclwdww000.c b/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_OPC/bclwdww000.c new file mode 100644 index 00000000000..2919c33539e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_OPC/bclwdww000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_OPC/test.desc new file mode 100644 index 00000000000..59f9785e0f3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww000.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_OPT/bclwdww000.c b/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_OPT/bclwdww000.c new file mode 100644 index 00000000000..2919c33539e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_OPT/bclwdww000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_OPT/test.desc new file mode 100644 index 00000000000..d3f1e08107f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww000.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_ALL/bclwdww000.c b/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_ALL/bclwdww000.c new file mode 100644 index 00000000000..2919c33539e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_ALL/bclwdww000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_ALL/test.desc new file mode 100644 index 00000000000..baf2dc606ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww000.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_OPC/bclwdww000.c b/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_OPC/bclwdww000.c new file mode 100644 index 00000000000..2919c33539e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_OPC/bclwdww000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_OPC/test.desc new file mode 100644 index 00000000000..1e1bddf3047 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww000.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_OPT/bclwdww000.c b/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_OPT/bclwdww000.c new file mode 100644 index 00000000000..2919c33539e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_OPT/bclwdww000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_OPT/test.desc new file mode 100644 index 00000000000..1cd45679f08 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww000.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_SC_SAFE/bclwdww000.c b/regression/goto-instrument-wmm-core/ppc_bclwdww000_SC_SAFE/bclwdww000.c new file mode 100644 index 00000000000..2919c33539e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_SC_SAFE/bclwdww000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww000_SC_SAFE/test.desc new file mode 100644 index 00000000000..f87697c40a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_ALL/bclwdww000.c b/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_ALL/bclwdww000.c new file mode 100644 index 00000000000..2919c33539e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_ALL/bclwdww000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_ALL/test.desc new file mode 100644 index 00000000000..9f7940f6d8b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +bclwdww000.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_OPC/bclwdww000.c b/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_OPC/bclwdww000.c new file mode 100644 index 00000000000..2919c33539e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_OPC/bclwdww000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_OPC/test.desc new file mode 100644 index 00000000000..ae0ef9faf1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +bclwdww000.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_OPT/bclwdww000.c b/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_OPT/bclwdww000.c new file mode 100644 index 00000000000..2919c33539e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_OPT/bclwdww000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_OPT/test.desc new file mode 100644 index 00000000000..f03e1c78dee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww000.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_CAV11_ERROR/bclwdww001.c b/regression/goto-instrument-wmm-core/ppc_bclwdww001_CAV11_ERROR/bclwdww001.c new file mode 100644 index 00000000000..545d47897fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_CAV11_ERROR/bclwdww001.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww001_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..201c2e0ecd5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww001.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_POWER_ALL/bclwdww001.c b/regression/goto-instrument-wmm-core/ppc_bclwdww001_POWER_ALL/bclwdww001.c new file mode 100644 index 00000000000..545d47897fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_POWER_ALL/bclwdww001.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww001_POWER_ALL/test.desc new file mode 100644 index 00000000000..d828b5933f2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +bclwdww001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_POWER_OPC/bclwdww001.c b/regression/goto-instrument-wmm-core/ppc_bclwdww001_POWER_OPC/bclwdww001.c new file mode 100644 index 00000000000..545d47897fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_POWER_OPC/bclwdww001.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww001_POWER_OPC/test.desc new file mode 100644 index 00000000000..11a3955f440 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww001_POWER_OPT/test.desc index bc1cf53e2fe..4cdeee54f02 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww001_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk bclwdww001.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_ALL/bclwdww001.c b/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_ALL/bclwdww001.c new file mode 100644 index 00000000000..545d47897fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_ALL/bclwdww001.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_ALL/test.desc new file mode 100644 index 00000000000..78db0fd8e0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww001.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_OPC/bclwdww001.c b/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_OPC/bclwdww001.c new file mode 100644 index 00000000000..545d47897fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_OPC/bclwdww001.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_OPC/test.desc new file mode 100644 index 00000000000..f72133a9d1f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww001.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_OPT/bclwdww001.c b/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_OPT/bclwdww001.c new file mode 100644 index 00000000000..545d47897fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_OPT/bclwdww001.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_OPT/test.desc new file mode 100644 index 00000000000..9de3c4b5bd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww001.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_ALL/bclwdww001.c b/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_ALL/bclwdww001.c new file mode 100644 index 00000000000..545d47897fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_ALL/bclwdww001.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_ALL/test.desc new file mode 100644 index 00000000000..33eca130e09 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww001.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_OPC/bclwdww001.c b/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_OPC/bclwdww001.c new file mode 100644 index 00000000000..545d47897fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_OPC/bclwdww001.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_OPC/test.desc new file mode 100644 index 00000000000..1d1a3377ebd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww001.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_OPT/bclwdww001.c b/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_OPT/bclwdww001.c new file mode 100644 index 00000000000..545d47897fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_OPT/bclwdww001.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_OPT/test.desc new file mode 100644 index 00000000000..3e9a0c34ddd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww001.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_SC_SAFE/bclwdww001.c b/regression/goto-instrument-wmm-core/ppc_bclwdww001_SC_SAFE/bclwdww001.c new file mode 100644 index 00000000000..545d47897fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_SC_SAFE/bclwdww001.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww001_SC_SAFE/test.desc new file mode 100644 index 00000000000..f17ea9225eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_ALL/bclwdww001.c b/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_ALL/bclwdww001.c new file mode 100644 index 00000000000..545d47897fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_ALL/bclwdww001.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_ALL/test.desc new file mode 100644 index 00000000000..4c01799e8ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww001.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_OPC/bclwdww001.c b/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_OPC/bclwdww001.c new file mode 100644 index 00000000000..545d47897fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_OPC/bclwdww001.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_OPC/test.desc new file mode 100644 index 00000000000..f6a2e802a15 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww001.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_OPT/bclwdww001.c b/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_OPT/bclwdww001.c new file mode 100644 index 00000000000..545d47897fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_OPT/bclwdww001.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_OPT/test.desc new file mode 100644 index 00000000000..b0e4924d582 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww001.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_CAV11_ERROR/bclwdww002.c b/regression/goto-instrument-wmm-core/ppc_bclwdww002_CAV11_ERROR/bclwdww002.c new file mode 100644 index 00000000000..3938ac117d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_CAV11_ERROR/bclwdww002.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww002_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..da8e3f7492a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww002.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_ALL/bclwdww002.c b/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_ALL/bclwdww002.c new file mode 100644 index 00000000000..3938ac117d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_ALL/bclwdww002.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_ALL/test.desc new file mode 100644 index 00000000000..97bfbc8f52f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +bclwdww002.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_OPC/bclwdww002.c b/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_OPC/bclwdww002.c new file mode 100644 index 00000000000..3938ac117d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_OPC/bclwdww002.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_OPC/test.desc new file mode 100644 index 00000000000..7fc268c9bd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +bclwdww002.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_OPT/bclwdww002.c b/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_OPT/bclwdww002.c new file mode 100644 index 00000000000..3938ac117d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_OPT/bclwdww002.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_OPT/test.desc new file mode 100644 index 00000000000..ffb3b9905ab --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +bclwdww002.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_ALL/bclwdww002.c b/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_ALL/bclwdww002.c new file mode 100644 index 00000000000..3938ac117d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_ALL/bclwdww002.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_ALL/test.desc new file mode 100644 index 00000000000..94b390fcfe6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww002.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_OPC/bclwdww002.c b/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_OPC/bclwdww002.c new file mode 100644 index 00000000000..3938ac117d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_OPC/bclwdww002.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_OPC/test.desc new file mode 100644 index 00000000000..44045bc12e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww002.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_OPT/bclwdww002.c b/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_OPT/bclwdww002.c new file mode 100644 index 00000000000..3938ac117d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_OPT/bclwdww002.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_OPT/test.desc new file mode 100644 index 00000000000..70d817323c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww002.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_ALL/bclwdww002.c b/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_ALL/bclwdww002.c new file mode 100644 index 00000000000..3938ac117d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_ALL/bclwdww002.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_ALL/test.desc new file mode 100644 index 00000000000..502a01584ab --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww002.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_OPC/bclwdww002.c b/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_OPC/bclwdww002.c new file mode 100644 index 00000000000..3938ac117d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_OPC/bclwdww002.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_OPC/test.desc new file mode 100644 index 00000000000..df58f2a5189 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww002.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_OPT/bclwdww002.c b/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_OPT/bclwdww002.c new file mode 100644 index 00000000000..3938ac117d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_OPT/bclwdww002.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_OPT/test.desc new file mode 100644 index 00000000000..bc021c618f3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww002.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_SC_SAFE/bclwdww002.c b/regression/goto-instrument-wmm-core/ppc_bclwdww002_SC_SAFE/bclwdww002.c new file mode 100644 index 00000000000..3938ac117d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_SC_SAFE/bclwdww002.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww002_SC_SAFE/test.desc new file mode 100644 index 00000000000..eced3a4f601 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww002.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_ALL/bclwdww002.c b/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_ALL/bclwdww002.c new file mode 100644 index 00000000000..3938ac117d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_ALL/bclwdww002.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_ALL/test.desc new file mode 100644 index 00000000000..0f1ff28d4f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww002.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_OPC/bclwdww002.c b/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_OPC/bclwdww002.c new file mode 100644 index 00000000000..3938ac117d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_OPC/bclwdww002.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_OPC/test.desc new file mode 100644 index 00000000000..61398b35964 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww002.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_OPT/bclwdww002.c b/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_OPT/bclwdww002.c new file mode 100644 index 00000000000..3938ac117d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_OPT/bclwdww002.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_OPT/test.desc new file mode 100644 index 00000000000..db53f253585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww002_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww002.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_CAV11_ERROR/bclwdww003.c b/regression/goto-instrument-wmm-core/ppc_bclwdww003_CAV11_ERROR/bclwdww003.c new file mode 100644 index 00000000000..3adf34a702f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_CAV11_ERROR/bclwdww003.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww003_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..104d6b995d1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww003.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_POWER_ALL/bclwdww003.c b/regression/goto-instrument-wmm-core/ppc_bclwdww003_POWER_ALL/bclwdww003.c new file mode 100644 index 00000000000..3adf34a702f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_POWER_ALL/bclwdww003.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww003_POWER_ALL/test.desc new file mode 100644 index 00000000000..2b8c1063c37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww003.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_POWER_OPC/bclwdww003.c b/regression/goto-instrument-wmm-core/ppc_bclwdww003_POWER_OPC/bclwdww003.c new file mode 100644 index 00000000000..3adf34a702f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_POWER_OPC/bclwdww003.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww003_POWER_OPC/test.desc new file mode 100644 index 00000000000..aff6f62ca1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww003.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww003_POWER_OPT/test.desc index c3cec1f57e0..a94fbd7846b 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww003_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk bclwdww003.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_ALL/bclwdww003.c b/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_ALL/bclwdww003.c new file mode 100644 index 00000000000..3adf34a702f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_ALL/bclwdww003.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_ALL/test.desc new file mode 100644 index 00000000000..412d7099325 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww003.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_OPC/bclwdww003.c b/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_OPC/bclwdww003.c new file mode 100644 index 00000000000..3adf34a702f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_OPC/bclwdww003.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_OPC/test.desc new file mode 100644 index 00000000000..5783c69d2a9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww003.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_OPT/bclwdww003.c b/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_OPT/bclwdww003.c new file mode 100644 index 00000000000..3adf34a702f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_OPT/bclwdww003.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_OPT/test.desc new file mode 100644 index 00000000000..ce185949a5a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww003.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_ALL/bclwdww003.c b/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_ALL/bclwdww003.c new file mode 100644 index 00000000000..3adf34a702f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_ALL/bclwdww003.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_ALL/test.desc new file mode 100644 index 00000000000..a9a078f3d99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww003.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_OPC/bclwdww003.c b/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_OPC/bclwdww003.c new file mode 100644 index 00000000000..3adf34a702f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_OPC/bclwdww003.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_OPC/test.desc new file mode 100644 index 00000000000..1be8a16c504 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww003.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_OPT/bclwdww003.c b/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_OPT/bclwdww003.c new file mode 100644 index 00000000000..3adf34a702f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_OPT/bclwdww003.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_OPT/test.desc new file mode 100644 index 00000000000..c1dea9a1315 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww003.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_SC_SAFE/bclwdww003.c b/regression/goto-instrument-wmm-core/ppc_bclwdww003_SC_SAFE/bclwdww003.c new file mode 100644 index 00000000000..3adf34a702f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_SC_SAFE/bclwdww003.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww003_SC_SAFE/test.desc new file mode 100644 index 00000000000..82b1adc4476 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww003.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_ALL/bclwdww003.c b/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_ALL/bclwdww003.c new file mode 100644 index 00000000000..3adf34a702f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_ALL/bclwdww003.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_ALL/test.desc new file mode 100644 index 00000000000..4d7d9397025 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww003.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_OPC/bclwdww003.c b/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_OPC/bclwdww003.c new file mode 100644 index 00000000000..3adf34a702f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_OPC/bclwdww003.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_OPC/test.desc new file mode 100644 index 00000000000..eff7adbce59 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww003.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_OPT/bclwdww003.c b/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_OPT/bclwdww003.c new file mode 100644 index 00000000000..3adf34a702f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_OPT/bclwdww003.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_OPT/test.desc new file mode 100644 index 00000000000..d3d79262538 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww003_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww003.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_CAV11_ERROR/bclwdww004.c b/regression/goto-instrument-wmm-core/ppc_bclwdww004_CAV11_ERROR/bclwdww004.c new file mode 100644 index 00000000000..8462bfbc067 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_CAV11_ERROR/bclwdww004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&y + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww004_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..2f1899f31dc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww004.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_ALL/bclwdww004.c b/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_ALL/bclwdww004.c new file mode 100644 index 00000000000..8462bfbc067 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_ALL/bclwdww004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&y + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_ALL/test.desc new file mode 100644 index 00000000000..69863d62a0f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +bclwdww004.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_OPC/bclwdww004.c b/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_OPC/bclwdww004.c new file mode 100644 index 00000000000..8462bfbc067 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_OPC/bclwdww004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&y + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_OPC/test.desc new file mode 100644 index 00000000000..5d2c3cf8a8c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +bclwdww004.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_OPT/bclwdww004.c b/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_OPT/bclwdww004.c new file mode 100644 index 00000000000..8462bfbc067 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_OPT/bclwdww004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&y + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_OPT/test.desc new file mode 100644 index 00000000000..ea55143a4d8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +bclwdww004.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_ALL/bclwdww004.c b/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_ALL/bclwdww004.c new file mode 100644 index 00000000000..8462bfbc067 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_ALL/bclwdww004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&y + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_ALL/test.desc new file mode 100644 index 00000000000..b57458e9c43 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww004.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_OPC/bclwdww004.c b/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_OPC/bclwdww004.c new file mode 100644 index 00000000000..8462bfbc067 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_OPC/bclwdww004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&y + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_OPC/test.desc new file mode 100644 index 00000000000..ee42fc3862c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww004.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_OPT/bclwdww004.c b/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_OPT/bclwdww004.c new file mode 100644 index 00000000000..8462bfbc067 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_OPT/bclwdww004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&y + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_OPT/test.desc new file mode 100644 index 00000000000..be1322d2f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww004.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_ALL/bclwdww004.c b/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_ALL/bclwdww004.c new file mode 100644 index 00000000000..8462bfbc067 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_ALL/bclwdww004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&y + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_ALL/test.desc new file mode 100644 index 00000000000..36cbf75776d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww004.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_OPC/bclwdww004.c b/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_OPC/bclwdww004.c new file mode 100644 index 00000000000..8462bfbc067 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_OPC/bclwdww004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&y + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_OPC/test.desc new file mode 100644 index 00000000000..dc95ad1c711 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww004.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_OPT/bclwdww004.c b/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_OPT/bclwdww004.c new file mode 100644 index 00000000000..8462bfbc067 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_OPT/bclwdww004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&y + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_OPT/test.desc new file mode 100644 index 00000000000..c7f85bd8a28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww004.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_SC_SAFE/bclwdww004.c b/regression/goto-instrument-wmm-core/ppc_bclwdww004_SC_SAFE/bclwdww004.c new file mode 100644 index 00000000000..8462bfbc067 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_SC_SAFE/bclwdww004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&y + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww004_SC_SAFE/test.desc new file mode 100644 index 00000000000..69f5a5f46ae --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww004.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_ALL/bclwdww004.c b/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_ALL/bclwdww004.c new file mode 100644 index 00000000000..8462bfbc067 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_ALL/bclwdww004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&y + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_ALL/test.desc new file mode 100644 index 00000000000..97d8c2f764d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww004.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_OPC/bclwdww004.c b/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_OPC/bclwdww004.c new file mode 100644 index 00000000000..8462bfbc067 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_OPC/bclwdww004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&y + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_OPC/test.desc new file mode 100644 index 00000000000..631b977bdbf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww004.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_OPT/bclwdww004.c b/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_OPT/bclwdww004.c new file mode 100644 index 00000000000..8462bfbc067 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_OPT/bclwdww004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&y + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_OPT/test.desc new file mode 100644 index 00000000000..4f72b990695 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww004_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww004.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_CAV11_ERROR/bclwdww005.c b/regression/goto-instrument-wmm-core/ppc_bclwdww005_CAV11_ERROR/bclwdww005.c new file mode 100644 index 00000000000..c1c66339095 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_CAV11_ERROR/bclwdww005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww005_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..73d7a3a7252 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww005.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_POWER_ALL/bclwdww005.c b/regression/goto-instrument-wmm-core/ppc_bclwdww005_POWER_ALL/bclwdww005.c new file mode 100644 index 00000000000..c1c66339095 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_POWER_ALL/bclwdww005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww005_POWER_ALL/test.desc new file mode 100644 index 00000000000..a287b7f948d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww005.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_POWER_OPC/bclwdww005.c b/regression/goto-instrument-wmm-core/ppc_bclwdww005_POWER_OPC/bclwdww005.c new file mode 100644 index 00000000000..c1c66339095 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_POWER_OPC/bclwdww005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww005_POWER_OPC/test.desc new file mode 100644 index 00000000000..725c063e904 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww005.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww005_POWER_OPT/test.desc index 98a40b4be9e..cfeb52e0951 100644 --- a/regression/goto-instrument-wmm-core/ppc_bclwdww005_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk bclwdww005.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_ALL/bclwdww005.c b/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_ALL/bclwdww005.c new file mode 100644 index 00000000000..c1c66339095 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_ALL/bclwdww005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_ALL/test.desc new file mode 100644 index 00000000000..31c7750a657 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww005.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_OPC/bclwdww005.c b/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_OPC/bclwdww005.c new file mode 100644 index 00000000000..c1c66339095 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_OPC/bclwdww005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_OPC/test.desc new file mode 100644 index 00000000000..a81acfea603 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww005.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_OPT/bclwdww005.c b/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_OPT/bclwdww005.c new file mode 100644 index 00000000000..c1c66339095 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_OPT/bclwdww005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_OPT/test.desc new file mode 100644 index 00000000000..54b69ed55ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww005.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_ALL/bclwdww005.c b/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_ALL/bclwdww005.c new file mode 100644 index 00000000000..c1c66339095 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_ALL/bclwdww005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_ALL/test.desc new file mode 100644 index 00000000000..bda97ecf893 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww005.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_OPC/bclwdww005.c b/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_OPC/bclwdww005.c new file mode 100644 index 00000000000..c1c66339095 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_OPC/bclwdww005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_OPC/test.desc new file mode 100644 index 00000000000..c128711591a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww005.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_OPT/bclwdww005.c b/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_OPT/bclwdww005.c new file mode 100644 index 00000000000..c1c66339095 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_OPT/bclwdww005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_OPT/test.desc new file mode 100644 index 00000000000..a05c6cf3878 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww005.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_SC_SAFE/bclwdww005.c b/regression/goto-instrument-wmm-core/ppc_bclwdww005_SC_SAFE/bclwdww005.c new file mode 100644 index 00000000000..c1c66339095 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_SC_SAFE/bclwdww005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww005_SC_SAFE/test.desc new file mode 100644 index 00000000000..dfdafb58292 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww005.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_ALL/bclwdww005.c b/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_ALL/bclwdww005.c new file mode 100644 index 00000000000..c1c66339095 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_ALL/bclwdww005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_ALL/test.desc new file mode 100644 index 00000000000..d6537a2d247 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww005.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_OPC/bclwdww005.c b/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_OPC/bclwdww005.c new file mode 100644 index 00000000000..c1c66339095 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_OPC/bclwdww005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_OPC/test.desc new file mode 100644 index 00000000000..63231279c4a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww005.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_OPT/bclwdww005.c b/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_OPT/bclwdww005.c new file mode 100644 index 00000000000..c1c66339095 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_OPT/bclwdww005.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_OPT/test.desc new file mode 100644 index 00000000000..0144166a987 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww005_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww005.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_CAV11_ERROR/bclwdww006.c b/regression/goto-instrument-wmm-core/ppc_bclwdww006_CAV11_ERROR/bclwdww006.c new file mode 100644 index 00000000000..9f8d142ca64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_CAV11_ERROR/bclwdww006.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww006_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..3edffede416 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww006.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_ALL/bclwdww006.c b/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_ALL/bclwdww006.c new file mode 100644 index 00000000000..9f8d142ca64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_ALL/bclwdww006.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_ALL/test.desc new file mode 100644 index 00000000000..9604a30bd4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +bclwdww006.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_OPC/bclwdww006.c b/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_OPC/bclwdww006.c new file mode 100644 index 00000000000..9f8d142ca64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_OPC/bclwdww006.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_OPC/test.desc new file mode 100644 index 00000000000..307667c8a27 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +bclwdww006.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_OPT/bclwdww006.c b/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_OPT/bclwdww006.c new file mode 100644 index 00000000000..9f8d142ca64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_OPT/bclwdww006.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_OPT/test.desc new file mode 100644 index 00000000000..a31d466fdc8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +bclwdww006.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_ALL/bclwdww006.c b/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_ALL/bclwdww006.c new file mode 100644 index 00000000000..9f8d142ca64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_ALL/bclwdww006.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_ALL/test.desc new file mode 100644 index 00000000000..544b11d0ce9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww006.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_OPC/bclwdww006.c b/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_OPC/bclwdww006.c new file mode 100644 index 00000000000..9f8d142ca64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_OPC/bclwdww006.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_OPC/test.desc new file mode 100644 index 00000000000..cfa5f29f257 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww006.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_OPT/bclwdww006.c b/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_OPT/bclwdww006.c new file mode 100644 index 00000000000..9f8d142ca64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_OPT/bclwdww006.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_OPT/test.desc new file mode 100644 index 00000000000..f34198625b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww006.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_ALL/bclwdww006.c b/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_ALL/bclwdww006.c new file mode 100644 index 00000000000..9f8d142ca64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_ALL/bclwdww006.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_ALL/test.desc new file mode 100644 index 00000000000..61c4f6fd1c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww006.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_OPC/bclwdww006.c b/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_OPC/bclwdww006.c new file mode 100644 index 00000000000..9f8d142ca64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_OPC/bclwdww006.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_OPC/test.desc new file mode 100644 index 00000000000..74e6dd4a214 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww006.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_OPT/bclwdww006.c b/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_OPT/bclwdww006.c new file mode 100644 index 00000000000..9f8d142ca64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_OPT/bclwdww006.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_OPT/test.desc new file mode 100644 index 00000000000..4d64db9ce29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww006.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_SC_SAFE/bclwdww006.c b/regression/goto-instrument-wmm-core/ppc_bclwdww006_SC_SAFE/bclwdww006.c new file mode 100644 index 00000000000..9f8d142ca64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_SC_SAFE/bclwdww006.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww006_SC_SAFE/test.desc new file mode 100644 index 00000000000..637ad0e7ca8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww006.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_ALL/bclwdww006.c b/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_ALL/bclwdww006.c new file mode 100644 index 00000000000..9f8d142ca64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_ALL/bclwdww006.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_ALL/test.desc new file mode 100644 index 00000000000..1dea17b7f8d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww006.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_OPC/bclwdww006.c b/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_OPC/bclwdww006.c new file mode 100644 index 00000000000..9f8d142ca64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_OPC/bclwdww006.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_OPC/test.desc new file mode 100644 index 00000000000..21980474ebb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww006.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_OPT/bclwdww006.c b/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_OPT/bclwdww006.c new file mode 100644 index 00000000000..9f8d142ca64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_OPT/bclwdww006.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_OPT/test.desc new file mode 100644 index 00000000000..c9e1f57bbb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww006_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww006.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_CAV11_ERROR/bclwdww007.c b/regression/goto-instrument-wmm-core/ppc_bclwdww007_CAV11_ERROR/bclwdww007.c new file mode 100644 index 00000000000..65c47383335 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_CAV11_ERROR/bclwdww007.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww007_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..1791ebaa9fe --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww007.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_ALL/bclwdww007.c b/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_ALL/bclwdww007.c new file mode 100644 index 00000000000..65c47383335 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_ALL/bclwdww007.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_ALL/test.desc new file mode 100644 index 00000000000..46ebd2ca829 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +bclwdww007.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_OPC/bclwdww007.c b/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_OPC/bclwdww007.c new file mode 100644 index 00000000000..65c47383335 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_OPC/bclwdww007.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_OPC/test.desc new file mode 100644 index 00000000000..21480ad0811 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +bclwdww007.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_OPT/bclwdww007.c b/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_OPT/bclwdww007.c new file mode 100644 index 00000000000..65c47383335 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_OPT/bclwdww007.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_OPT/test.desc new file mode 100644 index 00000000000..3084c1892af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +bclwdww007.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_ALL/bclwdww007.c b/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_ALL/bclwdww007.c new file mode 100644 index 00000000000..65c47383335 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_ALL/bclwdww007.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_ALL/test.desc new file mode 100644 index 00000000000..44d166eeff8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww007.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_OPC/bclwdww007.c b/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_OPC/bclwdww007.c new file mode 100644 index 00000000000..65c47383335 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_OPC/bclwdww007.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_OPC/test.desc new file mode 100644 index 00000000000..0a6e620dc87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww007.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_OPT/bclwdww007.c b/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_OPT/bclwdww007.c new file mode 100644 index 00000000000..65c47383335 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_OPT/bclwdww007.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_OPT/test.desc new file mode 100644 index 00000000000..0f3ca16931c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww007.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_ALL/bclwdww007.c b/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_ALL/bclwdww007.c new file mode 100644 index 00000000000..65c47383335 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_ALL/bclwdww007.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_ALL/test.desc new file mode 100644 index 00000000000..f64f0f5cdce --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww007.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_OPC/bclwdww007.c b/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_OPC/bclwdww007.c new file mode 100644 index 00000000000..65c47383335 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_OPC/bclwdww007.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_OPC/test.desc new file mode 100644 index 00000000000..8fc5c330e3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww007.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_OPT/bclwdww007.c b/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_OPT/bclwdww007.c new file mode 100644 index 00000000000..65c47383335 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_OPT/bclwdww007.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_OPT/test.desc new file mode 100644 index 00000000000..9f326899510 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww007.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_SC_SAFE/bclwdww007.c b/regression/goto-instrument-wmm-core/ppc_bclwdww007_SC_SAFE/bclwdww007.c new file mode 100644 index 00000000000..65c47383335 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_SC_SAFE/bclwdww007.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww007_SC_SAFE/test.desc new file mode 100644 index 00000000000..f85cb4a62c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww007.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_ALL/bclwdww007.c b/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_ALL/bclwdww007.c new file mode 100644 index 00000000000..65c47383335 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_ALL/bclwdww007.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_ALL/test.desc new file mode 100644 index 00000000000..bbe854beba4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +bclwdww007.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_OPC/bclwdww007.c b/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_OPC/bclwdww007.c new file mode 100644 index 00000000000..65c47383335 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_OPC/bclwdww007.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_OPC/test.desc new file mode 100644 index 00000000000..0b623e6663e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +bclwdww007.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_OPT/bclwdww007.c b/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_OPT/bclwdww007.c new file mode 100644 index 00000000000..65c47383335 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_OPT/bclwdww007.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_OPT/test.desc new file mode 100644 index 00000000000..561d4cd1f71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww007_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww007.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_CAV11_SAFE/bclwdww009.c b/regression/goto-instrument-wmm-core/ppc_bclwdww009_CAV11_SAFE/bclwdww009.c new file mode 100644 index 00000000000..ddd922c5d96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_CAV11_SAFE/bclwdww009.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww009_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..d3f220e8ce2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww009.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_ALL/bclwdww009.c b/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_ALL/bclwdww009.c new file mode 100644 index 00000000000..ddd922c5d96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_ALL/bclwdww009.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_ALL/test.desc new file mode 100644 index 00000000000..d32d5eecff1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww009.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_OPC/bclwdww009.c b/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_OPC/bclwdww009.c new file mode 100644 index 00000000000..ddd922c5d96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_OPC/bclwdww009.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_OPC/test.desc new file mode 100644 index 00000000000..bb47fdbb369 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww009.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_OPT/bclwdww009.c b/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_OPT/bclwdww009.c new file mode 100644 index 00000000000..ddd922c5d96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_OPT/bclwdww009.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_OPT/test.desc new file mode 100644 index 00000000000..535434baa11 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww009.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_ALL/bclwdww009.c b/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_ALL/bclwdww009.c new file mode 100644 index 00000000000..ddd922c5d96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_ALL/bclwdww009.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_ALL/test.desc new file mode 100644 index 00000000000..0518ca0cccd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww009.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_OPC/bclwdww009.c b/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_OPC/bclwdww009.c new file mode 100644 index 00000000000..ddd922c5d96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_OPC/bclwdww009.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_OPC/test.desc new file mode 100644 index 00000000000..f8ba41fe998 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww009.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_OPT/bclwdww009.c b/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_OPT/bclwdww009.c new file mode 100644 index 00000000000..ddd922c5d96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_OPT/bclwdww009.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_OPT/test.desc new file mode 100644 index 00000000000..3a6216003b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww009.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_ALL/bclwdww009.c b/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_ALL/bclwdww009.c new file mode 100644 index 00000000000..ddd922c5d96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_ALL/bclwdww009.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_ALL/test.desc new file mode 100644 index 00000000000..3052941bf87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww009.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_OPC/bclwdww009.c b/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_OPC/bclwdww009.c new file mode 100644 index 00000000000..ddd922c5d96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_OPC/bclwdww009.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_OPC/test.desc new file mode 100644 index 00000000000..3f0cefeced2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww009.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_OPT/bclwdww009.c b/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_OPT/bclwdww009.c new file mode 100644 index 00000000000..ddd922c5d96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_OPT/bclwdww009.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_OPT/test.desc new file mode 100644 index 00000000000..34e16434de1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww009.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_SC_SAFE/bclwdww009.c b/regression/goto-instrument-wmm-core/ppc_bclwdww009_SC_SAFE/bclwdww009.c new file mode 100644 index 00000000000..ddd922c5d96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_SC_SAFE/bclwdww009.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww009_SC_SAFE/test.desc new file mode 100644 index 00000000000..60e74365490 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww009.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_ALL/bclwdww009.c b/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_ALL/bclwdww009.c new file mode 100644 index 00000000000..ddd922c5d96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_ALL/bclwdww009.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_ALL/test.desc new file mode 100644 index 00000000000..65a9cbce3ee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww009.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_OPC/bclwdww009.c b/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_OPC/bclwdww009.c new file mode 100644 index 00000000000..ddd922c5d96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_OPC/bclwdww009.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_OPC/test.desc new file mode 100644 index 00000000000..d25b581d5a9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwdww009.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_OPT/bclwdww009.c b/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_OPT/bclwdww009.c new file mode 100644 index 00000000000..ddd922c5d96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_OPT/bclwdww009.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_OPT/test.desc new file mode 100644 index 00000000000..a85ef1e9bbc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwdww009_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwdww009.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_CAV11_ERROR/bclwsww000.c b/regression/goto-instrument-wmm-core/ppc_bclwsww000_CAV11_ERROR/bclwsww000.c new file mode 100644 index 00000000000..fa6be99d28d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_CAV11_ERROR/bclwsww000.c @@ -0,0 +1,90 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = 2; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 2 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwsww000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..177015803d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwsww000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_ALL/bclwsww000.c b/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_ALL/bclwsww000.c new file mode 100644 index 00000000000..fa6be99d28d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_ALL/bclwsww000.c @@ -0,0 +1,90 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = 2; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 2 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_ALL/test.desc new file mode 100644 index 00000000000..36719ee427a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwsww000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_OPC/bclwsww000.c b/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_OPC/bclwsww000.c new file mode 100644 index 00000000000..fa6be99d28d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_OPC/bclwsww000.c @@ -0,0 +1,90 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = 2; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 2 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_OPC/test.desc new file mode 100644 index 00000000000..255c8f849ac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwsww000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_OPT/bclwsww000.c b/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_OPT/bclwsww000.c new file mode 100644 index 00000000000..fa6be99d28d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_OPT/bclwsww000.c @@ -0,0 +1,90 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = 2; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 2 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_OPT/test.desc new file mode 100644 index 00000000000..d8f3df9a705 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwsww000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_ALL/bclwsww000.c b/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_ALL/bclwsww000.c new file mode 100644 index 00000000000..fa6be99d28d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_ALL/bclwsww000.c @@ -0,0 +1,90 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = 2; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 2 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_ALL/test.desc new file mode 100644 index 00000000000..b0969e89a16 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwsww000.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_OPC/bclwsww000.c b/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_OPC/bclwsww000.c new file mode 100644 index 00000000000..fa6be99d28d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_OPC/bclwsww000.c @@ -0,0 +1,90 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = 2; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 2 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_OPC/test.desc new file mode 100644 index 00000000000..ff3b47900df --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwsww000.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_OPT/bclwsww000.c b/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_OPT/bclwsww000.c new file mode 100644 index 00000000000..fa6be99d28d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_OPT/bclwsww000.c @@ -0,0 +1,90 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = 2; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 2 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_OPT/test.desc new file mode 100644 index 00000000000..6bf59a2cf98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwsww000.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_ALL/bclwsww000.c b/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_ALL/bclwsww000.c new file mode 100644 index 00000000000..fa6be99d28d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_ALL/bclwsww000.c @@ -0,0 +1,90 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = 2; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 2 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_ALL/test.desc new file mode 100644 index 00000000000..90ec0350153 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwsww000.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_OPC/bclwsww000.c b/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_OPC/bclwsww000.c new file mode 100644 index 00000000000..fa6be99d28d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_OPC/bclwsww000.c @@ -0,0 +1,90 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = 2; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 2 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_OPC/test.desc new file mode 100644 index 00000000000..a88e1da9881 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwsww000.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_OPT/bclwsww000.c b/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_OPT/bclwsww000.c new file mode 100644 index 00000000000..fa6be99d28d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_OPT/bclwsww000.c @@ -0,0 +1,90 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = 2; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 2 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_OPT/test.desc new file mode 100644 index 00000000000..5baf9f0e604 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwsww000.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_SC_SAFE/bclwsww000.c b/regression/goto-instrument-wmm-core/ppc_bclwsww000_SC_SAFE/bclwsww000.c new file mode 100644 index 00000000000..fa6be99d28d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_SC_SAFE/bclwsww000.c @@ -0,0 +1,90 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = 2; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 2 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwsww000_SC_SAFE/test.desc new file mode 100644 index 00000000000..0e0c97c6e3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwsww000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_ALL/bclwsww000.c b/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_ALL/bclwsww000.c new file mode 100644 index 00000000000..fa6be99d28d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_ALL/bclwsww000.c @@ -0,0 +1,90 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = 2; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 2 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_ALL/test.desc new file mode 100644 index 00000000000..91c212f523d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwsww000.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_OPC/bclwsww000.c b/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_OPC/bclwsww000.c new file mode 100644 index 00000000000..fa6be99d28d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_OPC/bclwsww000.c @@ -0,0 +1,90 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = 2; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 2 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_OPC/test.desc new file mode 100644 index 00000000000..f5a3ada09b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +bclwsww000.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_OPT/bclwsww000.c b/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_OPT/bclwsww000.c new file mode 100644 index 00000000000..fa6be99d28d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_OPT/bclwsww000.c @@ -0,0 +1,90 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = 2; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 2 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_OPT/test.desc new file mode 100644 index 00000000000..b6495d2fc54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_bclwsww000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +bclwsww000.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_CAV11_SAFE/iriw+addrs.c b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_CAV11_SAFE/iriw+addrs.c new file mode 100644 index 00000000000..5bdf2ff44be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_CAV11_SAFE/iriw+addrs.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..798296caf95 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+addrs.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_ALL/iriw+addrs.c b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_ALL/iriw+addrs.c new file mode 100644 index 00000000000..5bdf2ff44be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_ALL/iriw+addrs.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_ALL/test.desc new file mode 100644 index 00000000000..278b0f816a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +iriw+addrs.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_OPC/iriw+addrs.c b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_OPC/iriw+addrs.c new file mode 100644 index 00000000000..5bdf2ff44be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_OPC/iriw+addrs.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_OPC/test.desc new file mode 100644 index 00000000000..0ce2b4bbbfe --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+addrs.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_OPT/iriw+addrs.c b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_OPT/iriw+addrs.c new file mode 100644 index 00000000000..5bdf2ff44be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_OPT/iriw+addrs.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_OPT/test.desc new file mode 100644 index 00000000000..7b8f72eb817 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +iriw+addrs.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_ALL/iriw+addrs.c b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_ALL/iriw+addrs.c new file mode 100644 index 00000000000..5bdf2ff44be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_ALL/iriw+addrs.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_ALL/test.desc new file mode 100644 index 00000000000..220a6b9670e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+addrs.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_OPC/iriw+addrs.c b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_OPC/iriw+addrs.c new file mode 100644 index 00000000000..5bdf2ff44be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_OPC/iriw+addrs.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_OPC/test.desc new file mode 100644 index 00000000000..4ebbd6728cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+addrs.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_OPT/iriw+addrs.c b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_OPT/iriw+addrs.c new file mode 100644 index 00000000000..5bdf2ff44be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_OPT/iriw+addrs.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_OPT/test.desc new file mode 100644 index 00000000000..e717df7ae57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +iriw+addrs.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_ALL/iriw+addrs.c b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_ALL/iriw+addrs.c new file mode 100644 index 00000000000..5bdf2ff44be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_ALL/iriw+addrs.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_ALL/test.desc new file mode 100644 index 00000000000..104fa9f7ff6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+addrs.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_OPC/iriw+addrs.c b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_OPC/iriw+addrs.c new file mode 100644 index 00000000000..5bdf2ff44be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_OPC/iriw+addrs.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_OPC/test.desc new file mode 100644 index 00000000000..f41abb1f6c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+addrs.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_OPT/iriw+addrs.c b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_OPT/iriw+addrs.c new file mode 100644 index 00000000000..5bdf2ff44be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_OPT/iriw+addrs.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_OPT/test.desc new file mode 100644 index 00000000000..3aebf15a537 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +iriw+addrs.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_SC_SAFE/iriw+addrs.c b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_SC_SAFE/iriw+addrs.c new file mode 100644 index 00000000000..5bdf2ff44be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_SC_SAFE/iriw+addrs.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_SC_SAFE/test.desc new file mode 100644 index 00000000000..344bf35bad5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+addrs.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_ALL/iriw+addrs.c b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_ALL/iriw+addrs.c new file mode 100644 index 00000000000..5bdf2ff44be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_ALL/iriw+addrs.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_ALL/test.desc new file mode 100644 index 00000000000..37261a4f58e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+addrs.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_OPC/iriw+addrs.c b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_OPC/iriw+addrs.c new file mode 100644 index 00000000000..5bdf2ff44be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_OPC/iriw+addrs.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_OPC/test.desc new file mode 100644 index 00000000000..9abbce9c775 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+addrs.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_OPT/iriw+addrs.c b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_OPT/iriw+addrs.c new file mode 100644 index 00000000000..5bdf2ff44be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_OPT/iriw+addrs.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_OPT/test.desc new file mode 100644 index 00000000000..c6a2650eb8f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+addrs_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +iriw+addrs.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_CAV11_SAFE/iriw+lwsync+addr.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_CAV11_SAFE/iriw+lwsync+addr.c new file mode 100644 index 00000000000..4a81d136a05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_CAV11_SAFE/iriw+lwsync+addr.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..6a1eeae57b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsync+addr.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_ALL/iriw+lwsync+addr.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_ALL/iriw+lwsync+addr.c new file mode 100644 index 00000000000..4a81d136a05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_ALL/iriw+lwsync+addr.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_ALL/test.desc new file mode 100644 index 00000000000..ab4fd35e353 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsync+addr.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_OPC/iriw+lwsync+addr.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_OPC/iriw+lwsync+addr.c new file mode 100644 index 00000000000..4a81d136a05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_OPC/iriw+lwsync+addr.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_OPC/test.desc new file mode 100644 index 00000000000..37054d852bf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsync+addr.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_OPT/iriw+lwsync+addr.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_OPT/iriw+lwsync+addr.c new file mode 100644 index 00000000000..4a81d136a05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_OPT/iriw+lwsync+addr.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_OPT/test.desc new file mode 100644 index 00000000000..309af8b4dbc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +iriw+lwsync+addr.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_ALL/iriw+lwsync+addr.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_ALL/iriw+lwsync+addr.c new file mode 100644 index 00000000000..4a81d136a05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_ALL/iriw+lwsync+addr.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_ALL/test.desc new file mode 100644 index 00000000000..c1db7bc1a3b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsync+addr.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_OPC/iriw+lwsync+addr.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_OPC/iriw+lwsync+addr.c new file mode 100644 index 00000000000..4a81d136a05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_OPC/iriw+lwsync+addr.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_OPC/test.desc new file mode 100644 index 00000000000..7a8b1a15cda --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsync+addr.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_OPT/iriw+lwsync+addr.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_OPT/iriw+lwsync+addr.c new file mode 100644 index 00000000000..4a81d136a05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_OPT/iriw+lwsync+addr.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_OPT/test.desc new file mode 100644 index 00000000000..051ef59635c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +iriw+lwsync+addr.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_ALL/iriw+lwsync+addr.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_ALL/iriw+lwsync+addr.c new file mode 100644 index 00000000000..4a81d136a05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_ALL/iriw+lwsync+addr.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_ALL/test.desc new file mode 100644 index 00000000000..22377f2a3de --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsync+addr.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_OPC/iriw+lwsync+addr.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_OPC/iriw+lwsync+addr.c new file mode 100644 index 00000000000..4a81d136a05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_OPC/iriw+lwsync+addr.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_OPC/test.desc new file mode 100644 index 00000000000..22a9793391c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsync+addr.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_OPT/iriw+lwsync+addr.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_OPT/iriw+lwsync+addr.c new file mode 100644 index 00000000000..4a81d136a05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_OPT/iriw+lwsync+addr.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_OPT/test.desc new file mode 100644 index 00000000000..d9842c45f09 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +iriw+lwsync+addr.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_SC_SAFE/iriw+lwsync+addr.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_SC_SAFE/iriw+lwsync+addr.c new file mode 100644 index 00000000000..4a81d136a05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_SC_SAFE/iriw+lwsync+addr.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_SC_SAFE/test.desc new file mode 100644 index 00000000000..766bf022528 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsync+addr.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_ALL/iriw+lwsync+addr.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_ALL/iriw+lwsync+addr.c new file mode 100644 index 00000000000..4a81d136a05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_ALL/iriw+lwsync+addr.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_ALL/test.desc new file mode 100644 index 00000000000..bd9de60471f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsync+addr.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_OPC/iriw+lwsync+addr.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_OPC/iriw+lwsync+addr.c new file mode 100644 index 00000000000..4a81d136a05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_OPC/iriw+lwsync+addr.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_OPC/test.desc new file mode 100644 index 00000000000..94d1b2b8ce3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsync+addr.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_OPT/iriw+lwsync+addr.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_OPT/iriw+lwsync+addr.c new file mode 100644 index 00000000000..4a81d136a05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_OPT/iriw+lwsync+addr.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = *(&y + __unbuffered_p3_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_OPT/test.desc new file mode 100644 index 00000000000..ac3280e7fe0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsync+addr_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +iriw+lwsync+addr.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_CAV11_SAFE/iriw+lwsyncs.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_CAV11_SAFE/iriw+lwsyncs.c new file mode 100644 index 00000000000..ef08d276875 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_CAV11_SAFE/iriw+lwsyncs.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + lwfence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..ec04da6fda5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsyncs.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_POWER_ALL/iriw+lwsyncs.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_POWER_ALL/iriw+lwsyncs.c new file mode 100644 index 00000000000..ef08d276875 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_POWER_ALL/iriw+lwsyncs.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + lwfence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_POWER_ALL/test.desc new file mode 100644 index 00000000000..97dc6706489 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsyncs.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_POWER_OPC/iriw+lwsyncs.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_POWER_OPC/iriw+lwsyncs.c new file mode 100644 index 00000000000..ef08d276875 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_POWER_OPC/iriw+lwsyncs.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + lwfence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_POWER_OPC/test.desc new file mode 100644 index 00000000000..8cbbdb63e04 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsyncs.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_POWER_OPT/test.desc index 24a94827b4f..de8d5f7782a 100644 --- a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk iriw+lwsyncs.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_ALL/iriw+lwsyncs.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_ALL/iriw+lwsyncs.c new file mode 100644 index 00000000000..ef08d276875 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_ALL/iriw+lwsyncs.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + lwfence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_ALL/test.desc new file mode 100644 index 00000000000..ccf509858ce --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsyncs.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_OPC/iriw+lwsyncs.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_OPC/iriw+lwsyncs.c new file mode 100644 index 00000000000..ef08d276875 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_OPC/iriw+lwsyncs.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + lwfence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_OPC/test.desc new file mode 100644 index 00000000000..dd70415fd15 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsyncs.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_OPT/iriw+lwsyncs.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_OPT/iriw+lwsyncs.c new file mode 100644 index 00000000000..ef08d276875 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_OPT/iriw+lwsyncs.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + lwfence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_OPT/test.desc new file mode 100644 index 00000000000..e60e3f796eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +iriw+lwsyncs.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_ALL/iriw+lwsyncs.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_ALL/iriw+lwsyncs.c new file mode 100644 index 00000000000..ef08d276875 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_ALL/iriw+lwsyncs.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + lwfence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_ALL/test.desc new file mode 100644 index 00000000000..21a697ca72c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsyncs.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_OPC/iriw+lwsyncs.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_OPC/iriw+lwsyncs.c new file mode 100644 index 00000000000..ef08d276875 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_OPC/iriw+lwsyncs.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + lwfence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_OPC/test.desc new file mode 100644 index 00000000000..62cc99dacab --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsyncs.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_OPT/iriw+lwsyncs.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_OPT/iriw+lwsyncs.c new file mode 100644 index 00000000000..ef08d276875 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_OPT/iriw+lwsyncs.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + lwfence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_OPT/test.desc new file mode 100644 index 00000000000..6ef35998742 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +iriw+lwsyncs.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_SC_SAFE/iriw+lwsyncs.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_SC_SAFE/iriw+lwsyncs.c new file mode 100644 index 00000000000..ef08d276875 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_SC_SAFE/iriw+lwsyncs.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + lwfence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_SC_SAFE/test.desc new file mode 100644 index 00000000000..6249fd245f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsyncs.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_ALL/iriw+lwsyncs.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_ALL/iriw+lwsyncs.c new file mode 100644 index 00000000000..ef08d276875 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_ALL/iriw+lwsyncs.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + lwfence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_ALL/test.desc new file mode 100644 index 00000000000..2fee2d04a21 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsyncs.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_OPC/iriw+lwsyncs.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_OPC/iriw+lwsyncs.c new file mode 100644 index 00000000000..ef08d276875 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_OPC/iriw+lwsyncs.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + lwfence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_OPC/test.desc new file mode 100644 index 00000000000..a5d89a36e7e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +iriw+lwsyncs.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_OPT/iriw+lwsyncs.c b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_OPT/iriw+lwsyncs.c new file mode 100644 index 00000000000..ef08d276875 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_OPT/iriw+lwsyncs.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + lwfence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_OPT/test.desc new file mode 100644 index 00000000000..1ab158b27bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_iriw+lwsyncs_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +iriw+lwsyncs.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_CAV11_ERROR/lwdwr000.c b/regression/goto-instrument-wmm-core/ppc_lwdwr000_CAV11_ERROR/lwdwr000.c new file mode 100644 index 00000000000..feb185e9a7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_CAV11_ERROR/lwdwr000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..7d92bd9ba72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_POWER_ALL/lwdwr000.c b/regression/goto-instrument-wmm-core/ppc_lwdwr000_POWER_ALL/lwdwr000.c new file mode 100644 index 00000000000..feb185e9a7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_POWER_ALL/lwdwr000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr000_POWER_ALL/test.desc new file mode 100644 index 00000000000..9203ff23827 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_POWER_OPC/lwdwr000.c b/regression/goto-instrument-wmm-core/ppc_lwdwr000_POWER_OPC/lwdwr000.c new file mode 100644 index 00000000000..feb185e9a7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_POWER_OPC/lwdwr000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr000_POWER_OPC/test.desc new file mode 100644 index 00000000000..cccb3ba717d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr000_POWER_OPT/test.desc index 8e6c4c6a937..34e4f48d927 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwdwr000_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk lwdwr000.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_ALL/lwdwr000.c b/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_ALL/lwdwr000.c new file mode 100644 index 00000000000..feb185e9a7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_ALL/lwdwr000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_ALL/test.desc new file mode 100644 index 00000000000..fac3beb5c33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr000.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_OPC/lwdwr000.c b/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_OPC/lwdwr000.c new file mode 100644 index 00000000000..feb185e9a7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_OPC/lwdwr000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_OPC/test.desc new file mode 100644 index 00000000000..7287697713b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr000.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_OPT/lwdwr000.c b/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_OPT/lwdwr000.c new file mode 100644 index 00000000000..feb185e9a7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_OPT/lwdwr000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_OPT/test.desc new file mode 100644 index 00000000000..809f9b7476d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr000.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_ALL/lwdwr000.c b/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_ALL/lwdwr000.c new file mode 100644 index 00000000000..feb185e9a7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_ALL/lwdwr000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_ALL/test.desc new file mode 100644 index 00000000000..6480c546880 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr000.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_OPC/lwdwr000.c b/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_OPC/lwdwr000.c new file mode 100644 index 00000000000..feb185e9a7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_OPC/lwdwr000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_OPC/test.desc new file mode 100644 index 00000000000..ce349b7a087 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr000.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_OPT/lwdwr000.c b/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_OPT/lwdwr000.c new file mode 100644 index 00000000000..feb185e9a7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_OPT/lwdwr000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_OPT/test.desc new file mode 100644 index 00000000000..054b92039d8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr000.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_SC_SAFE/lwdwr000.c b/regression/goto-instrument-wmm-core/ppc_lwdwr000_SC_SAFE/lwdwr000.c new file mode 100644 index 00000000000..feb185e9a7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_SC_SAFE/lwdwr000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr000_SC_SAFE/test.desc new file mode 100644 index 00000000000..20ad8592490 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_TSO_ALL/lwdwr000.c b/regression/goto-instrument-wmm-core/ppc_lwdwr000_TSO_ALL/lwdwr000.c new file mode 100644 index 00000000000..feb185e9a7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_TSO_ALL/lwdwr000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr000_TSO_ALL/test.desc new file mode 100644 index 00000000000..617bd8eadca --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr000.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_TSO_OPC/lwdwr000.c b/regression/goto-instrument-wmm-core/ppc_lwdwr000_TSO_OPC/lwdwr000.c new file mode 100644 index 00000000000..feb185e9a7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_TSO_OPC/lwdwr000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr000_TSO_OPC/test.desc new file mode 100644 index 00000000000..613e1b49a23 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr000.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr000_TSO_OPT/test.desc index e9e9c2fa117..86b9f214f5a 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwdwr000_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr000_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk lwdwr000.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_CAV11_ERROR/lwdwr001.c b/regression/goto-instrument-wmm-core/ppc_lwdwr001_CAV11_ERROR/lwdwr001.c new file mode 100644 index 00000000000..b2c643d8af8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_CAV11_ERROR/lwdwr001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr001_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..87b340e7229 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr001.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_POWER_ALL/lwdwr001.c b/regression/goto-instrument-wmm-core/ppc_lwdwr001_POWER_ALL/lwdwr001.c new file mode 100644 index 00000000000..b2c643d8af8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_POWER_ALL/lwdwr001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr001_POWER_ALL/test.desc new file mode 100644 index 00000000000..cc1435273be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_POWER_OPC/lwdwr001.c b/regression/goto-instrument-wmm-core/ppc_lwdwr001_POWER_OPC/lwdwr001.c new file mode 100644 index 00000000000..b2c643d8af8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_POWER_OPC/lwdwr001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr001_POWER_OPC/test.desc new file mode 100644 index 00000000000..cb89b9f9574 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr001_POWER_OPT/test.desc index 5a5e42faa65..7babfd8f274 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwdwr001_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk lwdwr001.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_ALL/lwdwr001.c b/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_ALL/lwdwr001.c new file mode 100644 index 00000000000..b2c643d8af8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_ALL/lwdwr001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_ALL/test.desc new file mode 100644 index 00000000000..12412de052c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr001.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_OPC/lwdwr001.c b/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_OPC/lwdwr001.c new file mode 100644 index 00000000000..b2c643d8af8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_OPC/lwdwr001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_OPC/test.desc new file mode 100644 index 00000000000..ae34c0f3a58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr001.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_OPT/lwdwr001.c b/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_OPT/lwdwr001.c new file mode 100644 index 00000000000..b2c643d8af8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_OPT/lwdwr001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_OPT/test.desc new file mode 100644 index 00000000000..d87fea21ee8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr001.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_ALL/lwdwr001.c b/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_ALL/lwdwr001.c new file mode 100644 index 00000000000..b2c643d8af8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_ALL/lwdwr001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_ALL/test.desc new file mode 100644 index 00000000000..260f1a91f95 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr001.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_OPC/lwdwr001.c b/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_OPC/lwdwr001.c new file mode 100644 index 00000000000..b2c643d8af8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_OPC/lwdwr001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_OPC/test.desc new file mode 100644 index 00000000000..a2e355f61ee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr001.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_OPT/lwdwr001.c b/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_OPT/lwdwr001.c new file mode 100644 index 00000000000..b2c643d8af8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_OPT/lwdwr001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_OPT/test.desc new file mode 100644 index 00000000000..9361850eb7e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr001.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_SC_SAFE/lwdwr001.c b/regression/goto-instrument-wmm-core/ppc_lwdwr001_SC_SAFE/lwdwr001.c new file mode 100644 index 00000000000..b2c643d8af8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_SC_SAFE/lwdwr001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr001_SC_SAFE/test.desc new file mode 100644 index 00000000000..ecc47e11953 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_ALL/lwdwr001.c b/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_ALL/lwdwr001.c new file mode 100644 index 00000000000..b2c643d8af8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_ALL/lwdwr001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_ALL/test.desc new file mode 100644 index 00000000000..7e7aacee2f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr001.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_OPC/lwdwr001.c b/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_OPC/lwdwr001.c new file mode 100644 index 00000000000..b2c643d8af8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_OPC/lwdwr001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_OPC/test.desc new file mode 100644 index 00000000000..7359c78eaf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr001.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_OPT/lwdwr001.c b/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_OPT/lwdwr001.c new file mode 100644 index 00000000000..b2c643d8af8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_OPT/lwdwr001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_OPT/test.desc new file mode 100644 index 00000000000..da36f57faa5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr001.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_CAV11_ERROR/lwdwr002.c b/regression/goto-instrument-wmm-core/ppc_lwdwr002_CAV11_ERROR/lwdwr002.c new file mode 100644 index 00000000000..7c89d50d665 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_CAV11_ERROR/lwdwr002.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr002_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..95e4712fa6f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr002.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_ALL/lwdwr002.c b/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_ALL/lwdwr002.c new file mode 100644 index 00000000000..7c89d50d665 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_ALL/lwdwr002.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_ALL/test.desc new file mode 100644 index 00000000000..977ec4a270d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr002.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_OPC/lwdwr002.c b/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_OPC/lwdwr002.c new file mode 100644 index 00000000000..7c89d50d665 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_OPC/lwdwr002.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_OPC/test.desc new file mode 100644 index 00000000000..8fd70c1b107 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr002.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_OPT/lwdwr002.c b/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_OPT/lwdwr002.c new file mode 100644 index 00000000000..7c89d50d665 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_OPT/lwdwr002.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_OPT/test.desc new file mode 100644 index 00000000000..182e56f0a95 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr002.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_ALL/lwdwr002.c b/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_ALL/lwdwr002.c new file mode 100644 index 00000000000..7c89d50d665 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_ALL/lwdwr002.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_ALL/test.desc new file mode 100644 index 00000000000..b7549029bb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr002.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_OPC/lwdwr002.c b/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_OPC/lwdwr002.c new file mode 100644 index 00000000000..7c89d50d665 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_OPC/lwdwr002.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_OPC/test.desc new file mode 100644 index 00000000000..3ea26ceab2e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr002.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_OPT/lwdwr002.c b/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_OPT/lwdwr002.c new file mode 100644 index 00000000000..7c89d50d665 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_OPT/lwdwr002.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_OPT/test.desc new file mode 100644 index 00000000000..dc7d3e18c75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr002.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_ALL/lwdwr002.c b/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_ALL/lwdwr002.c new file mode 100644 index 00000000000..7c89d50d665 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_ALL/lwdwr002.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_ALL/test.desc new file mode 100644 index 00000000000..c41d9220c77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr002.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_OPC/lwdwr002.c b/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_OPC/lwdwr002.c new file mode 100644 index 00000000000..7c89d50d665 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_OPC/lwdwr002.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_OPC/test.desc new file mode 100644 index 00000000000..687eaf872a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr002.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_OPT/lwdwr002.c b/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_OPT/lwdwr002.c new file mode 100644 index 00000000000..7c89d50d665 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_OPT/lwdwr002.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_OPT/test.desc new file mode 100644 index 00000000000..3e1b328dc4a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr002.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_SC_SAFE/lwdwr002.c b/regression/goto-instrument-wmm-core/ppc_lwdwr002_SC_SAFE/lwdwr002.c new file mode 100644 index 00000000000..7c89d50d665 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_SC_SAFE/lwdwr002.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr002_SC_SAFE/test.desc new file mode 100644 index 00000000000..91dc8149bbf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr002.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_ALL/lwdwr002.c b/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_ALL/lwdwr002.c new file mode 100644 index 00000000000..7c89d50d665 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_ALL/lwdwr002.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_ALL/test.desc new file mode 100644 index 00000000000..40907da8be4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr002.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_OPC/lwdwr002.c b/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_OPC/lwdwr002.c new file mode 100644 index 00000000000..7c89d50d665 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_OPC/lwdwr002.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_OPC/test.desc new file mode 100644 index 00000000000..8d16e8da064 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr002.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_OPT/lwdwr002.c b/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_OPT/lwdwr002.c new file mode 100644 index 00000000000..7c89d50d665 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_OPT/lwdwr002.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_OPT/test.desc new file mode 100644 index 00000000000..299f4036451 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr002_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr002.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_CAV11_ERROR/lwdwr003.c b/regression/goto-instrument-wmm-core/ppc_lwdwr003_CAV11_ERROR/lwdwr003.c new file mode 100644 index 00000000000..31c23a6957b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_CAV11_ERROR/lwdwr003.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr003_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..21b0c99ea6b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr003.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_ALL/lwdwr003.c b/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_ALL/lwdwr003.c new file mode 100644 index 00000000000..31c23a6957b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_ALL/lwdwr003.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_ALL/test.desc new file mode 100644 index 00000000000..df226fa4e91 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr003.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_OPC/lwdwr003.c b/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_OPC/lwdwr003.c new file mode 100644 index 00000000000..31c23a6957b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_OPC/lwdwr003.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_OPC/test.desc new file mode 100644 index 00000000000..ac5d1556bdf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr003.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_OPT/lwdwr003.c b/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_OPT/lwdwr003.c new file mode 100644 index 00000000000..31c23a6957b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_OPT/lwdwr003.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_OPT/test.desc new file mode 100644 index 00000000000..32db254bb89 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr003.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_ALL/lwdwr003.c b/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_ALL/lwdwr003.c new file mode 100644 index 00000000000..31c23a6957b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_ALL/lwdwr003.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_ALL/test.desc new file mode 100644 index 00000000000..cc63ec5dc76 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr003.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_OPC/lwdwr003.c b/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_OPC/lwdwr003.c new file mode 100644 index 00000000000..31c23a6957b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_OPC/lwdwr003.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_OPC/test.desc new file mode 100644 index 00000000000..2edf278c85f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr003.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_OPT/lwdwr003.c b/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_OPT/lwdwr003.c new file mode 100644 index 00000000000..31c23a6957b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_OPT/lwdwr003.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_OPT/test.desc new file mode 100644 index 00000000000..0d5dcd1a212 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr003.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_ALL/lwdwr003.c b/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_ALL/lwdwr003.c new file mode 100644 index 00000000000..31c23a6957b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_ALL/lwdwr003.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_ALL/test.desc new file mode 100644 index 00000000000..cb2a4956664 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr003.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_OPC/lwdwr003.c b/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_OPC/lwdwr003.c new file mode 100644 index 00000000000..31c23a6957b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_OPC/lwdwr003.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_OPC/test.desc new file mode 100644 index 00000000000..52de83edfac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr003.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_OPT/lwdwr003.c b/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_OPT/lwdwr003.c new file mode 100644 index 00000000000..31c23a6957b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_OPT/lwdwr003.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_OPT/test.desc new file mode 100644 index 00000000000..c2c2995c275 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr003.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_SC_SAFE/lwdwr003.c b/regression/goto-instrument-wmm-core/ppc_lwdwr003_SC_SAFE/lwdwr003.c new file mode 100644 index 00000000000..31c23a6957b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_SC_SAFE/lwdwr003.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr003_SC_SAFE/test.desc new file mode 100644 index 00000000000..17f2221c74f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr003.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_ALL/lwdwr003.c b/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_ALL/lwdwr003.c new file mode 100644 index 00000000000..31c23a6957b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_ALL/lwdwr003.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_ALL/test.desc new file mode 100644 index 00000000000..7609f3e8f06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr003.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_OPC/lwdwr003.c b/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_OPC/lwdwr003.c new file mode 100644 index 00000000000..31c23a6957b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_OPC/lwdwr003.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_OPC/test.desc new file mode 100644 index 00000000000..11fe51c0717 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr003.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_OPT/lwdwr003.c b/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_OPT/lwdwr003.c new file mode 100644 index 00000000000..31c23a6957b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_OPT/lwdwr003.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_OPT/test.desc new file mode 100644 index 00000000000..674796ca118 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr003_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr003.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_CAV11_ERROR/lwdwr004.c b/regression/goto-instrument-wmm-core/ppc_lwdwr004_CAV11_ERROR/lwdwr004.c new file mode 100644 index 00000000000..5f9defe387d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_CAV11_ERROR/lwdwr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr004_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..eba6ddff57e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr004.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_POWER_ALL/lwdwr004.c b/regression/goto-instrument-wmm-core/ppc_lwdwr004_POWER_ALL/lwdwr004.c new file mode 100644 index 00000000000..5f9defe387d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_POWER_ALL/lwdwr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr004_POWER_ALL/test.desc new file mode 100644 index 00000000000..e7ea0e9aef2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr004.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_POWER_OPC/lwdwr004.c b/regression/goto-instrument-wmm-core/ppc_lwdwr004_POWER_OPC/lwdwr004.c new file mode 100644 index 00000000000..5f9defe387d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_POWER_OPC/lwdwr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr004_POWER_OPC/test.desc new file mode 100644 index 00000000000..4003e9b3075 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr004.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr004_POWER_OPT/test.desc index 585bac114a7..df8484f1dce 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwdwr004_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk lwdwr004.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_ALL/lwdwr004.c b/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_ALL/lwdwr004.c new file mode 100644 index 00000000000..5f9defe387d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_ALL/lwdwr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_ALL/test.desc new file mode 100644 index 00000000000..ded8fd02af9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr004.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_OPC/lwdwr004.c b/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_OPC/lwdwr004.c new file mode 100644 index 00000000000..5f9defe387d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_OPC/lwdwr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_OPC/test.desc new file mode 100644 index 00000000000..90a87c51d22 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr004.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_OPT/lwdwr004.c b/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_OPT/lwdwr004.c new file mode 100644 index 00000000000..5f9defe387d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_OPT/lwdwr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_OPT/test.desc new file mode 100644 index 00000000000..931904c5941 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr004.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_ALL/lwdwr004.c b/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_ALL/lwdwr004.c new file mode 100644 index 00000000000..5f9defe387d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_ALL/lwdwr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_ALL/test.desc new file mode 100644 index 00000000000..b8e17252b36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr004.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_OPC/lwdwr004.c b/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_OPC/lwdwr004.c new file mode 100644 index 00000000000..5f9defe387d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_OPC/lwdwr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_OPC/test.desc new file mode 100644 index 00000000000..07f78a36ead --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr004.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_OPT/lwdwr004.c b/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_OPT/lwdwr004.c new file mode 100644 index 00000000000..5f9defe387d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_OPT/lwdwr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_OPT/test.desc new file mode 100644 index 00000000000..09d9775cee5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr004.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_SC_SAFE/lwdwr004.c b/regression/goto-instrument-wmm-core/ppc_lwdwr004_SC_SAFE/lwdwr004.c new file mode 100644 index 00000000000..5f9defe387d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_SC_SAFE/lwdwr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr004_SC_SAFE/test.desc new file mode 100644 index 00000000000..ddc8a1d7753 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr004.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_TSO_ALL/lwdwr004.c b/regression/goto-instrument-wmm-core/ppc_lwdwr004_TSO_ALL/lwdwr004.c new file mode 100644 index 00000000000..5f9defe387d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_TSO_ALL/lwdwr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr004_TSO_ALL/test.desc new file mode 100644 index 00000000000..97649afda67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr004.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_TSO_OPC/lwdwr004.c b/regression/goto-instrument-wmm-core/ppc_lwdwr004_TSO_OPC/lwdwr004.c new file mode 100644 index 00000000000..5f9defe387d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_TSO_OPC/lwdwr004.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr004_TSO_OPC/test.desc new file mode 100644 index 00000000000..bad0c1fa70a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr004.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr004_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr004_TSO_OPT/test.desc index df2bc8d9865..fb3dd4904b8 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwdwr004_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr004_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk lwdwr004.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_CAV11_ERROR/lwdwr005.c b/regression/goto-instrument-wmm-core/ppc_lwdwr005_CAV11_ERROR/lwdwr005.c new file mode 100644 index 00000000000..9c55ee4cd49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_CAV11_ERROR/lwdwr005.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr005_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..c065e542d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr005.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_ALL/lwdwr005.c b/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_ALL/lwdwr005.c new file mode 100644 index 00000000000..9c55ee4cd49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_ALL/lwdwr005.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_ALL/test.desc new file mode 100644 index 00000000000..e421c52400e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr005.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_OPC/lwdwr005.c b/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_OPC/lwdwr005.c new file mode 100644 index 00000000000..9c55ee4cd49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_OPC/lwdwr005.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_OPC/test.desc new file mode 100644 index 00000000000..b94fe3727c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr005.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_OPT/lwdwr005.c b/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_OPT/lwdwr005.c new file mode 100644 index 00000000000..9c55ee4cd49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_OPT/lwdwr005.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_OPT/test.desc new file mode 100644 index 00000000000..251fb6bc706 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr005.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_ALL/lwdwr005.c b/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_ALL/lwdwr005.c new file mode 100644 index 00000000000..9c55ee4cd49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_ALL/lwdwr005.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_ALL/test.desc new file mode 100644 index 00000000000..fbd770f18c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr005.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_OPC/lwdwr005.c b/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_OPC/lwdwr005.c new file mode 100644 index 00000000000..9c55ee4cd49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_OPC/lwdwr005.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_OPC/test.desc new file mode 100644 index 00000000000..a68ec15e648 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr005.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_OPT/lwdwr005.c b/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_OPT/lwdwr005.c new file mode 100644 index 00000000000..9c55ee4cd49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_OPT/lwdwr005.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_OPT/test.desc new file mode 100644 index 00000000000..9e26c25d861 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr005.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_ALL/lwdwr005.c b/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_ALL/lwdwr005.c new file mode 100644 index 00000000000..9c55ee4cd49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_ALL/lwdwr005.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_ALL/test.desc new file mode 100644 index 00000000000..32d58d9d556 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr005.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_OPC/lwdwr005.c b/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_OPC/lwdwr005.c new file mode 100644 index 00000000000..9c55ee4cd49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_OPC/lwdwr005.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_OPC/test.desc new file mode 100644 index 00000000000..53775070682 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr005.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_OPT/lwdwr005.c b/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_OPT/lwdwr005.c new file mode 100644 index 00000000000..9c55ee4cd49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_OPT/lwdwr005.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_OPT/test.desc new file mode 100644 index 00000000000..d02984fd51b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr005.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_SC_SAFE/lwdwr005.c b/regression/goto-instrument-wmm-core/ppc_lwdwr005_SC_SAFE/lwdwr005.c new file mode 100644 index 00000000000..9c55ee4cd49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_SC_SAFE/lwdwr005.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr005_SC_SAFE/test.desc new file mode 100644 index 00000000000..ef576775650 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr005.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_ALL/lwdwr005.c b/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_ALL/lwdwr005.c new file mode 100644 index 00000000000..9c55ee4cd49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_ALL/lwdwr005.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_ALL/test.desc new file mode 100644 index 00000000000..2fe447c9fbb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr005.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_OPC/lwdwr005.c b/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_OPC/lwdwr005.c new file mode 100644 index 00000000000..9c55ee4cd49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_OPC/lwdwr005.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_OPC/test.desc new file mode 100644 index 00000000000..ee63f00c40e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr005.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_OPT/lwdwr005.c b/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_OPT/lwdwr005.c new file mode 100644 index 00000000000..9c55ee4cd49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_OPT/lwdwr005.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_OPT/test.desc new file mode 100644 index 00000000000..c52951b9b76 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr005_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr005.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_CAV11_ERROR/lwdwr006.c b/regression/goto-instrument-wmm-core/ppc_lwdwr006_CAV11_ERROR/lwdwr006.c new file mode 100644 index 00000000000..5ca2cce6880 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_CAV11_ERROR/lwdwr006.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr006_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..83ee3814706 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr006.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_POWER_ALL/lwdwr006.c b/regression/goto-instrument-wmm-core/ppc_lwdwr006_POWER_ALL/lwdwr006.c new file mode 100644 index 00000000000..5ca2cce6880 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_POWER_ALL/lwdwr006.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr006_POWER_ALL/test.desc new file mode 100644 index 00000000000..d93283a0ab0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr006.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_POWER_OPC/lwdwr006.c b/regression/goto-instrument-wmm-core/ppc_lwdwr006_POWER_OPC/lwdwr006.c new file mode 100644 index 00000000000..5ca2cce6880 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_POWER_OPC/lwdwr006.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr006_POWER_OPC/test.desc new file mode 100644 index 00000000000..4023da9ddc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr006.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr006_POWER_OPT/test.desc index 8226b7d29bd..ebf3e3481b7 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwdwr006_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk lwdwr006.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_ALL/lwdwr006.c b/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_ALL/lwdwr006.c new file mode 100644 index 00000000000..5ca2cce6880 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_ALL/lwdwr006.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_ALL/test.desc new file mode 100644 index 00000000000..a33dfbfef2e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr006.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_OPC/lwdwr006.c b/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_OPC/lwdwr006.c new file mode 100644 index 00000000000..5ca2cce6880 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_OPC/lwdwr006.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_OPC/test.desc new file mode 100644 index 00000000000..4c1297c1089 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr006.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_OPT/lwdwr006.c b/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_OPT/lwdwr006.c new file mode 100644 index 00000000000..5ca2cce6880 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_OPT/lwdwr006.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_OPT/test.desc new file mode 100644 index 00000000000..73aac46d69c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr006.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_ALL/lwdwr006.c b/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_ALL/lwdwr006.c new file mode 100644 index 00000000000..5ca2cce6880 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_ALL/lwdwr006.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_ALL/test.desc new file mode 100644 index 00000000000..96fb8597f64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr006.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_OPC/lwdwr006.c b/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_OPC/lwdwr006.c new file mode 100644 index 00000000000..5ca2cce6880 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_OPC/lwdwr006.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_OPC/test.desc new file mode 100644 index 00000000000..4f112246a5d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr006.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_OPT/lwdwr006.c b/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_OPT/lwdwr006.c new file mode 100644 index 00000000000..5ca2cce6880 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_OPT/lwdwr006.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_OPT/test.desc new file mode 100644 index 00000000000..57d7bbc82d5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr006.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_SC_SAFE/lwdwr006.c b/regression/goto-instrument-wmm-core/ppc_lwdwr006_SC_SAFE/lwdwr006.c new file mode 100644 index 00000000000..5ca2cce6880 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_SC_SAFE/lwdwr006.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr006_SC_SAFE/test.desc new file mode 100644 index 00000000000..f82036fe42e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr006.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_ALL/lwdwr006.c b/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_ALL/lwdwr006.c new file mode 100644 index 00000000000..5ca2cce6880 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_ALL/lwdwr006.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_ALL/test.desc new file mode 100644 index 00000000000..83a7ac7579e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr006.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_OPC/lwdwr006.c b/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_OPC/lwdwr006.c new file mode 100644 index 00000000000..5ca2cce6880 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_OPC/lwdwr006.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_OPC/test.desc new file mode 100644 index 00000000000..5bc4a70080a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr006.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_OPT/lwdwr006.c b/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_OPT/lwdwr006.c new file mode 100644 index 00000000000..5ca2cce6880 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_OPT/lwdwr006.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_OPT/test.desc new file mode 100644 index 00000000000..4379fe8ed55 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr006_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr006.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_CAV11_ERROR/lwdwr007.c b/regression/goto-instrument-wmm-core/ppc_lwdwr007_CAV11_ERROR/lwdwr007.c new file mode 100644 index 00000000000..fc748d065b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_CAV11_ERROR/lwdwr007.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr007_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..52bb0358667 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr007.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_POWER_ALL/lwdwr007.c b/regression/goto-instrument-wmm-core/ppc_lwdwr007_POWER_ALL/lwdwr007.c new file mode 100644 index 00000000000..fc748d065b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_POWER_ALL/lwdwr007.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr007_POWER_ALL/test.desc new file mode 100644 index 00000000000..31ecdde9008 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr007.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_POWER_OPC/lwdwr007.c b/regression/goto-instrument-wmm-core/ppc_lwdwr007_POWER_OPC/lwdwr007.c new file mode 100644 index 00000000000..fc748d065b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_POWER_OPC/lwdwr007.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr007_POWER_OPC/test.desc new file mode 100644 index 00000000000..4b964a36080 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr007.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr007_POWER_OPT/test.desc index 514687d6844..c77a0be9195 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwdwr007_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk lwdwr007.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_ALL/lwdwr007.c b/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_ALL/lwdwr007.c new file mode 100644 index 00000000000..fc748d065b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_ALL/lwdwr007.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_ALL/test.desc new file mode 100644 index 00000000000..34d18610b2f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr007.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_OPC/lwdwr007.c b/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_OPC/lwdwr007.c new file mode 100644 index 00000000000..fc748d065b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_OPC/lwdwr007.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_OPC/test.desc new file mode 100644 index 00000000000..3176c488949 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr007.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_OPT/lwdwr007.c b/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_OPT/lwdwr007.c new file mode 100644 index 00000000000..fc748d065b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_OPT/lwdwr007.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_OPT/test.desc new file mode 100644 index 00000000000..b91bf010c52 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr007.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_ALL/lwdwr007.c b/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_ALL/lwdwr007.c new file mode 100644 index 00000000000..fc748d065b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_ALL/lwdwr007.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_ALL/test.desc new file mode 100644 index 00000000000..f2a79f88b27 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr007.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_OPC/lwdwr007.c b/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_OPC/lwdwr007.c new file mode 100644 index 00000000000..fc748d065b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_OPC/lwdwr007.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_OPC/test.desc new file mode 100644 index 00000000000..8e382fb8dd9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr007.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_OPT/lwdwr007.c b/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_OPT/lwdwr007.c new file mode 100644 index 00000000000..fc748d065b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_OPT/lwdwr007.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_OPT/test.desc new file mode 100644 index 00000000000..e0d6e23b5ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr007.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_SC_SAFE/lwdwr007.c b/regression/goto-instrument-wmm-core/ppc_lwdwr007_SC_SAFE/lwdwr007.c new file mode 100644 index 00000000000..fc748d065b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_SC_SAFE/lwdwr007.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr007_SC_SAFE/test.desc new file mode 100644 index 00000000000..75e7eed105e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr007.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_ALL/lwdwr007.c b/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_ALL/lwdwr007.c new file mode 100644 index 00000000000..fc748d065b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_ALL/lwdwr007.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_ALL/test.desc new file mode 100644 index 00000000000..c595ba16e19 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr007.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_OPC/lwdwr007.c b/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_OPC/lwdwr007.c new file mode 100644 index 00000000000..fc748d065b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_OPC/lwdwr007.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_OPC/test.desc new file mode 100644 index 00000000000..851e82ead01 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr007.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_OPT/lwdwr007.c b/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_OPT/lwdwr007.c new file mode 100644 index 00000000000..fc748d065b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_OPT/lwdwr007.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_OPT/test.desc new file mode 100644 index 00000000000..fefa7c53697 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr007_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr007.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_CAV11_ERROR/lwdwr008.c b/regression/goto-instrument-wmm-core/ppc_lwdwr008_CAV11_ERROR/lwdwr008.c new file mode 100644 index 00000000000..813553e8c78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_CAV11_ERROR/lwdwr008.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr008_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..fce3069fea4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr008.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_ALL/lwdwr008.c b/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_ALL/lwdwr008.c new file mode 100644 index 00000000000..813553e8c78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_ALL/lwdwr008.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_ALL/test.desc new file mode 100644 index 00000000000..aad320c3796 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr008.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_OPC/lwdwr008.c b/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_OPC/lwdwr008.c new file mode 100644 index 00000000000..813553e8c78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_OPC/lwdwr008.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_OPC/test.desc new file mode 100644 index 00000000000..0c667acb9ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr008.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_OPT/lwdwr008.c b/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_OPT/lwdwr008.c new file mode 100644 index 00000000000..813553e8c78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_OPT/lwdwr008.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_OPT/test.desc new file mode 100644 index 00000000000..5a8fefe8ad0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr008.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_ALL/lwdwr008.c b/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_ALL/lwdwr008.c new file mode 100644 index 00000000000..813553e8c78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_ALL/lwdwr008.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_ALL/test.desc new file mode 100644 index 00000000000..04d2d032817 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr008.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_OPC/lwdwr008.c b/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_OPC/lwdwr008.c new file mode 100644 index 00000000000..813553e8c78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_OPC/lwdwr008.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_OPC/test.desc new file mode 100644 index 00000000000..cee5a768540 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr008.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_OPT/lwdwr008.c b/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_OPT/lwdwr008.c new file mode 100644 index 00000000000..813553e8c78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_OPT/lwdwr008.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_OPT/test.desc new file mode 100644 index 00000000000..93bcf7108c1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr008.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_ALL/lwdwr008.c b/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_ALL/lwdwr008.c new file mode 100644 index 00000000000..813553e8c78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_ALL/lwdwr008.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_ALL/test.desc new file mode 100644 index 00000000000..914ecb1148e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr008.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_OPC/lwdwr008.c b/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_OPC/lwdwr008.c new file mode 100644 index 00000000000..813553e8c78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_OPC/lwdwr008.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_OPC/test.desc new file mode 100644 index 00000000000..ee95cb0e95a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr008.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_OPT/lwdwr008.c b/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_OPT/lwdwr008.c new file mode 100644 index 00000000000..813553e8c78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_OPT/lwdwr008.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_OPT/test.desc new file mode 100644 index 00000000000..2bce42ab259 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr008.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_SC_SAFE/lwdwr008.c b/regression/goto-instrument-wmm-core/ppc_lwdwr008_SC_SAFE/lwdwr008.c new file mode 100644 index 00000000000..813553e8c78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_SC_SAFE/lwdwr008.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr008_SC_SAFE/test.desc new file mode 100644 index 00000000000..89790b3a972 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr008.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_ALL/lwdwr008.c b/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_ALL/lwdwr008.c new file mode 100644 index 00000000000..813553e8c78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_ALL/lwdwr008.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_ALL/test.desc new file mode 100644 index 00000000000..dc802e3f4c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr008.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_OPC/lwdwr008.c b/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_OPC/lwdwr008.c new file mode 100644 index 00000000000..813553e8c78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_OPC/lwdwr008.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_OPC/test.desc new file mode 100644 index 00000000000..e4c662b3327 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr008.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_OPT/lwdwr008.c b/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_OPT/lwdwr008.c new file mode 100644 index 00000000000..813553e8c78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_OPT/lwdwr008.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_OPT/test.desc new file mode 100644 index 00000000000..8b73ab01e10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr008_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr008.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_CAV11_ERROR/lwdwr009.c b/regression/goto-instrument-wmm-core/ppc_lwdwr009_CAV11_ERROR/lwdwr009.c new file mode 100644 index 00000000000..f10c7775521 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_CAV11_ERROR/lwdwr009.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr009_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..5a51d4f21c5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr009.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_ALL/lwdwr009.c b/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_ALL/lwdwr009.c new file mode 100644 index 00000000000..f10c7775521 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_ALL/lwdwr009.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_ALL/test.desc new file mode 100644 index 00000000000..17710ee2f6a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr009.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_OPC/lwdwr009.c b/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_OPC/lwdwr009.c new file mode 100644 index 00000000000..f10c7775521 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_OPC/lwdwr009.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_OPC/test.desc new file mode 100644 index 00000000000..1b2b016e97b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr009.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_OPT/lwdwr009.c b/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_OPT/lwdwr009.c new file mode 100644 index 00000000000..f10c7775521 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_OPT/lwdwr009.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_OPT/test.desc new file mode 100644 index 00000000000..5730d857f87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr009.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_ALL/lwdwr009.c b/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_ALL/lwdwr009.c new file mode 100644 index 00000000000..f10c7775521 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_ALL/lwdwr009.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_ALL/test.desc new file mode 100644 index 00000000000..ecc8eb7a295 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr009.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_OPC/lwdwr009.c b/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_OPC/lwdwr009.c new file mode 100644 index 00000000000..f10c7775521 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_OPC/lwdwr009.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_OPC/test.desc new file mode 100644 index 00000000000..496a07e001a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr009.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_OPT/lwdwr009.c b/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_OPT/lwdwr009.c new file mode 100644 index 00000000000..f10c7775521 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_OPT/lwdwr009.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_OPT/test.desc new file mode 100644 index 00000000000..92c72e4162f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr009.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_ALL/lwdwr009.c b/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_ALL/lwdwr009.c new file mode 100644 index 00000000000..f10c7775521 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_ALL/lwdwr009.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_ALL/test.desc new file mode 100644 index 00000000000..815915abcc5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr009.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_OPC/lwdwr009.c b/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_OPC/lwdwr009.c new file mode 100644 index 00000000000..f10c7775521 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_OPC/lwdwr009.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_OPC/test.desc new file mode 100644 index 00000000000..33c753bc5f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr009.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_OPT/lwdwr009.c b/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_OPT/lwdwr009.c new file mode 100644 index 00000000000..f10c7775521 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_OPT/lwdwr009.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_OPT/test.desc new file mode 100644 index 00000000000..ea771c87e80 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr009.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_SC_SAFE/lwdwr009.c b/regression/goto-instrument-wmm-core/ppc_lwdwr009_SC_SAFE/lwdwr009.c new file mode 100644 index 00000000000..f10c7775521 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_SC_SAFE/lwdwr009.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr009_SC_SAFE/test.desc new file mode 100644 index 00000000000..88f1bbf57f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr009.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_ALL/lwdwr009.c b/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_ALL/lwdwr009.c new file mode 100644 index 00000000000..f10c7775521 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_ALL/lwdwr009.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_ALL/test.desc new file mode 100644 index 00000000000..e8d672f7b12 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr009.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_OPC/lwdwr009.c b/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_OPC/lwdwr009.c new file mode 100644 index 00000000000..f10c7775521 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_OPC/lwdwr009.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_OPC/test.desc new file mode 100644 index 00000000000..543e443f6e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr009.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_OPT/lwdwr009.c b/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_OPT/lwdwr009.c new file mode 100644 index 00000000000..f10c7775521 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_OPT/lwdwr009.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_OPT/test.desc new file mode 100644 index 00000000000..98ddac08951 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr009_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr009.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_CAV11_ERROR/lwdwr010.c b/regression/goto-instrument-wmm-core/ppc_lwdwr010_CAV11_ERROR/lwdwr010.c new file mode 100644 index 00000000000..14ec2b42e8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_CAV11_ERROR/lwdwr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr010_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..6400721e869 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr010.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_POWER_ALL/lwdwr010.c b/regression/goto-instrument-wmm-core/ppc_lwdwr010_POWER_ALL/lwdwr010.c new file mode 100644 index 00000000000..14ec2b42e8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_POWER_ALL/lwdwr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr010_POWER_ALL/test.desc new file mode 100644 index 00000000000..e8739c8b0a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr010.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_POWER_OPC/lwdwr010.c b/regression/goto-instrument-wmm-core/ppc_lwdwr010_POWER_OPC/lwdwr010.c new file mode 100644 index 00000000000..14ec2b42e8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_POWER_OPC/lwdwr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr010_POWER_OPC/test.desc new file mode 100644 index 00000000000..c110bf396cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr010.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr010_POWER_OPT/test.desc index a7e92aed554..24d8f8c07e7 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwdwr010_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk lwdwr010.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_ALL/lwdwr010.c b/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_ALL/lwdwr010.c new file mode 100644 index 00000000000..14ec2b42e8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_ALL/lwdwr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_ALL/test.desc new file mode 100644 index 00000000000..60bccac953d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr010.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_OPC/lwdwr010.c b/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_OPC/lwdwr010.c new file mode 100644 index 00000000000..14ec2b42e8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_OPC/lwdwr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_OPC/test.desc new file mode 100644 index 00000000000..a00587b6f54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr010.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_OPT/lwdwr010.c b/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_OPT/lwdwr010.c new file mode 100644 index 00000000000..14ec2b42e8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_OPT/lwdwr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_OPT/test.desc new file mode 100644 index 00000000000..530450f1590 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr010.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_ALL/lwdwr010.c b/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_ALL/lwdwr010.c new file mode 100644 index 00000000000..14ec2b42e8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_ALL/lwdwr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_ALL/test.desc new file mode 100644 index 00000000000..8b4ec13b818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr010.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_OPC/lwdwr010.c b/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_OPC/lwdwr010.c new file mode 100644 index 00000000000..14ec2b42e8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_OPC/lwdwr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_OPC/test.desc new file mode 100644 index 00000000000..16fd68fe249 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr010.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_OPT/lwdwr010.c b/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_OPT/lwdwr010.c new file mode 100644 index 00000000000..14ec2b42e8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_OPT/lwdwr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_OPT/test.desc new file mode 100644 index 00000000000..0b4773835e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr010.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_SC_SAFE/lwdwr010.c b/regression/goto-instrument-wmm-core/ppc_lwdwr010_SC_SAFE/lwdwr010.c new file mode 100644 index 00000000000..14ec2b42e8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_SC_SAFE/lwdwr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr010_SC_SAFE/test.desc new file mode 100644 index 00000000000..1f5e7072b80 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr010.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_ALL/lwdwr010.c b/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_ALL/lwdwr010.c new file mode 100644 index 00000000000..14ec2b42e8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_ALL/lwdwr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_ALL/test.desc new file mode 100644 index 00000000000..13b9b22ebd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr010.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_OPC/lwdwr010.c b/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_OPC/lwdwr010.c new file mode 100644 index 00000000000..14ec2b42e8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_OPC/lwdwr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_OPC/test.desc new file mode 100644 index 00000000000..d2fa535b23d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr010.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_OPT/lwdwr010.c b/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_OPT/lwdwr010.c new file mode 100644 index 00000000000..14ec2b42e8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_OPT/lwdwr010.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_OPT/test.desc new file mode 100644 index 00000000000..61b435bcba4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr010_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr010.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_CAV11_ERROR/lwdwr011.c b/regression/goto-instrument-wmm-core/ppc_lwdwr011_CAV11_ERROR/lwdwr011.c new file mode 100644 index 00000000000..505ec7ae6d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_CAV11_ERROR/lwdwr011.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr011_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..ae7e198328d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr011.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_ALL/lwdwr011.c b/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_ALL/lwdwr011.c new file mode 100644 index 00000000000..505ec7ae6d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_ALL/lwdwr011.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_ALL/test.desc new file mode 100644 index 00000000000..302d5970356 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr011.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_OPC/lwdwr011.c b/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_OPC/lwdwr011.c new file mode 100644 index 00000000000..505ec7ae6d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_OPC/lwdwr011.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_OPC/test.desc new file mode 100644 index 00000000000..c370ae98e16 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr011.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_OPT/lwdwr011.c b/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_OPT/lwdwr011.c new file mode 100644 index 00000000000..505ec7ae6d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_OPT/lwdwr011.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_OPT/test.desc new file mode 100644 index 00000000000..25baa306de2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr011.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_ALL/lwdwr011.c b/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_ALL/lwdwr011.c new file mode 100644 index 00000000000..505ec7ae6d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_ALL/lwdwr011.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_ALL/test.desc new file mode 100644 index 00000000000..04237792f67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr011.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_OPC/lwdwr011.c b/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_OPC/lwdwr011.c new file mode 100644 index 00000000000..505ec7ae6d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_OPC/lwdwr011.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_OPC/test.desc new file mode 100644 index 00000000000..bf9c9cbffb4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr011.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_OPT/lwdwr011.c b/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_OPT/lwdwr011.c new file mode 100644 index 00000000000..505ec7ae6d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_OPT/lwdwr011.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_OPT/test.desc new file mode 100644 index 00000000000..5d7434a4291 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr011.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_ALL/lwdwr011.c b/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_ALL/lwdwr011.c new file mode 100644 index 00000000000..505ec7ae6d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_ALL/lwdwr011.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_ALL/test.desc new file mode 100644 index 00000000000..166a57c6f29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr011.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_OPC/lwdwr011.c b/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_OPC/lwdwr011.c new file mode 100644 index 00000000000..505ec7ae6d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_OPC/lwdwr011.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_OPC/test.desc new file mode 100644 index 00000000000..05a7c61e4c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr011.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_OPT/lwdwr011.c b/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_OPT/lwdwr011.c new file mode 100644 index 00000000000..505ec7ae6d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_OPT/lwdwr011.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_OPT/test.desc new file mode 100644 index 00000000000..80ddf7b8838 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr011.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_SC_SAFE/lwdwr011.c b/regression/goto-instrument-wmm-core/ppc_lwdwr011_SC_SAFE/lwdwr011.c new file mode 100644 index 00000000000..505ec7ae6d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_SC_SAFE/lwdwr011.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr011_SC_SAFE/test.desc new file mode 100644 index 00000000000..f8dfe747641 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr011.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_ALL/lwdwr011.c b/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_ALL/lwdwr011.c new file mode 100644 index 00000000000..505ec7ae6d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_ALL/lwdwr011.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_ALL/test.desc new file mode 100644 index 00000000000..6d44550e490 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr011.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_OPC/lwdwr011.c b/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_OPC/lwdwr011.c new file mode 100644 index 00000000000..505ec7ae6d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_OPC/lwdwr011.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_OPC/test.desc new file mode 100644 index 00000000000..bacaf0346c9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr011.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_OPT/lwdwr011.c b/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_OPT/lwdwr011.c new file mode 100644 index 00000000000..505ec7ae6d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_OPT/lwdwr011.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_OPT/test.desc new file mode 100644 index 00000000000..db01d114016 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr011_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr011.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_CAV11_ERROR/lwdwr012.c b/regression/goto-instrument-wmm-core/ppc_lwdwr012_CAV11_ERROR/lwdwr012.c new file mode 100644 index 00000000000..3eafc37f963 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_CAV11_ERROR/lwdwr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr012_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..b4668d6d89c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr012.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_ALL/lwdwr012.c b/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_ALL/lwdwr012.c new file mode 100644 index 00000000000..3eafc37f963 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_ALL/lwdwr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_ALL/test.desc new file mode 100644 index 00000000000..b23ac0168ae --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr012.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_OPC/lwdwr012.c b/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_OPC/lwdwr012.c new file mode 100644 index 00000000000..3eafc37f963 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_OPC/lwdwr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_OPC/test.desc new file mode 100644 index 00000000000..f6590dd73d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr012.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_OPT/lwdwr012.c b/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_OPT/lwdwr012.c new file mode 100644 index 00000000000..3eafc37f963 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_OPT/lwdwr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_OPT/test.desc new file mode 100644 index 00000000000..66c0819099a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr012.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_ALL/lwdwr012.c b/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_ALL/lwdwr012.c new file mode 100644 index 00000000000..3eafc37f963 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_ALL/lwdwr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_ALL/test.desc new file mode 100644 index 00000000000..d2f4b2f68d8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr012.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_OPC/lwdwr012.c b/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_OPC/lwdwr012.c new file mode 100644 index 00000000000..3eafc37f963 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_OPC/lwdwr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_OPC/test.desc new file mode 100644 index 00000000000..715980f7622 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr012.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_OPT/lwdwr012.c b/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_OPT/lwdwr012.c new file mode 100644 index 00000000000..3eafc37f963 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_OPT/lwdwr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_OPT/test.desc new file mode 100644 index 00000000000..bf51ad16890 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr012.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_ALL/lwdwr012.c b/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_ALL/lwdwr012.c new file mode 100644 index 00000000000..3eafc37f963 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_ALL/lwdwr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_ALL/test.desc new file mode 100644 index 00000000000..17955296ea4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr012.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_OPC/lwdwr012.c b/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_OPC/lwdwr012.c new file mode 100644 index 00000000000..3eafc37f963 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_OPC/lwdwr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_OPC/test.desc new file mode 100644 index 00000000000..4ab44d2728d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr012.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_OPT/lwdwr012.c b/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_OPT/lwdwr012.c new file mode 100644 index 00000000000..3eafc37f963 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_OPT/lwdwr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_OPT/test.desc new file mode 100644 index 00000000000..a00e5337c07 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr012.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_SC_SAFE/lwdwr012.c b/regression/goto-instrument-wmm-core/ppc_lwdwr012_SC_SAFE/lwdwr012.c new file mode 100644 index 00000000000..3eafc37f963 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_SC_SAFE/lwdwr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr012_SC_SAFE/test.desc new file mode 100644 index 00000000000..ab36d18b8e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr012.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_ALL/lwdwr012.c b/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_ALL/lwdwr012.c new file mode 100644 index 00000000000..3eafc37f963 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_ALL/lwdwr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_ALL/test.desc new file mode 100644 index 00000000000..3c1598c106f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr012.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_OPC/lwdwr012.c b/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_OPC/lwdwr012.c new file mode 100644 index 00000000000..3eafc37f963 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_OPC/lwdwr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_OPC/test.desc new file mode 100644 index 00000000000..e155ead7870 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr012.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_OPT/lwdwr012.c b/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_OPT/lwdwr012.c new file mode 100644 index 00000000000..3eafc37f963 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_OPT/lwdwr012.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_OPT/test.desc new file mode 100644 index 00000000000..49d7d13ca53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr012_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr012.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_CAV11_ERROR/lwdwr013.c b/regression/goto-instrument-wmm-core/ppc_lwdwr013_CAV11_ERROR/lwdwr013.c new file mode 100644 index 00000000000..5b0bd417d05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_CAV11_ERROR/lwdwr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr013_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..a44d21ab0cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr013.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_ALL/lwdwr013.c b/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_ALL/lwdwr013.c new file mode 100644 index 00000000000..5b0bd417d05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_ALL/lwdwr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_ALL/test.desc new file mode 100644 index 00000000000..728f671fe7b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr013.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_OPC/lwdwr013.c b/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_OPC/lwdwr013.c new file mode 100644 index 00000000000..5b0bd417d05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_OPC/lwdwr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_OPC/test.desc new file mode 100644 index 00000000000..f3b1de1d44d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr013.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_OPT/lwdwr013.c b/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_OPT/lwdwr013.c new file mode 100644 index 00000000000..5b0bd417d05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_OPT/lwdwr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_OPT/test.desc new file mode 100644 index 00000000000..fe7c1ab0714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr013.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_ALL/lwdwr013.c b/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_ALL/lwdwr013.c new file mode 100644 index 00000000000..5b0bd417d05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_ALL/lwdwr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_ALL/test.desc new file mode 100644 index 00000000000..2aeffae6dc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr013.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_OPC/lwdwr013.c b/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_OPC/lwdwr013.c new file mode 100644 index 00000000000..5b0bd417d05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_OPC/lwdwr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_OPC/test.desc new file mode 100644 index 00000000000..1200c3b6fba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr013.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_OPT/lwdwr013.c b/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_OPT/lwdwr013.c new file mode 100644 index 00000000000..5b0bd417d05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_OPT/lwdwr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_OPT/test.desc new file mode 100644 index 00000000000..04db3c4975c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr013.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_ALL/lwdwr013.c b/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_ALL/lwdwr013.c new file mode 100644 index 00000000000..5b0bd417d05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_ALL/lwdwr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_ALL/test.desc new file mode 100644 index 00000000000..a5ba094e14f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr013.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_OPC/lwdwr013.c b/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_OPC/lwdwr013.c new file mode 100644 index 00000000000..5b0bd417d05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_OPC/lwdwr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_OPC/test.desc new file mode 100644 index 00000000000..05efbf10a24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr013.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_OPT/lwdwr013.c b/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_OPT/lwdwr013.c new file mode 100644 index 00000000000..5b0bd417d05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_OPT/lwdwr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_OPT/test.desc new file mode 100644 index 00000000000..7db3e3c9544 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr013.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_SC_SAFE/lwdwr013.c b/regression/goto-instrument-wmm-core/ppc_lwdwr013_SC_SAFE/lwdwr013.c new file mode 100644 index 00000000000..5b0bd417d05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_SC_SAFE/lwdwr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr013_SC_SAFE/test.desc new file mode 100644 index 00000000000..25e621382b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr013.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_ALL/lwdwr013.c b/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_ALL/lwdwr013.c new file mode 100644 index 00000000000..5b0bd417d05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_ALL/lwdwr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_ALL/test.desc new file mode 100644 index 00000000000..cef8988556a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr013.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_OPC/lwdwr013.c b/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_OPC/lwdwr013.c new file mode 100644 index 00000000000..5b0bd417d05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_OPC/lwdwr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_OPC/test.desc new file mode 100644 index 00000000000..5931123144a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr013.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_OPT/lwdwr013.c b/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_OPT/lwdwr013.c new file mode 100644 index 00000000000..5b0bd417d05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_OPT/lwdwr013.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_OPT/test.desc new file mode 100644 index 00000000000..8876d46525a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr013_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr013.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_CAV11_ERROR/lwdwr014.c b/regression/goto-instrument-wmm-core/ppc_lwdwr014_CAV11_ERROR/lwdwr014.c new file mode 100644 index 00000000000..af868f09a47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_CAV11_ERROR/lwdwr014.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr014_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..3e202317b62 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr014.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_ALL/lwdwr014.c b/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_ALL/lwdwr014.c new file mode 100644 index 00000000000..af868f09a47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_ALL/lwdwr014.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_ALL/test.desc new file mode 100644 index 00000000000..977a5210416 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr014.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_OPC/lwdwr014.c b/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_OPC/lwdwr014.c new file mode 100644 index 00000000000..af868f09a47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_OPC/lwdwr014.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_OPC/test.desc new file mode 100644 index 00000000000..8487ef27ab2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr014.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_OPT/lwdwr014.c b/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_OPT/lwdwr014.c new file mode 100644 index 00000000000..af868f09a47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_OPT/lwdwr014.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_OPT/test.desc new file mode 100644 index 00000000000..a01b8096781 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr014.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_ALL/lwdwr014.c b/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_ALL/lwdwr014.c new file mode 100644 index 00000000000..af868f09a47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_ALL/lwdwr014.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_ALL/test.desc new file mode 100644 index 00000000000..c720393aaac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr014.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_OPC/lwdwr014.c b/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_OPC/lwdwr014.c new file mode 100644 index 00000000000..af868f09a47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_OPC/lwdwr014.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_OPC/test.desc new file mode 100644 index 00000000000..14225d66d3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr014.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_OPT/lwdwr014.c b/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_OPT/lwdwr014.c new file mode 100644 index 00000000000..af868f09a47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_OPT/lwdwr014.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_OPT/test.desc new file mode 100644 index 00000000000..622d51b88ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr014.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_ALL/lwdwr014.c b/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_ALL/lwdwr014.c new file mode 100644 index 00000000000..af868f09a47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_ALL/lwdwr014.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_ALL/test.desc new file mode 100644 index 00000000000..6eb771b4022 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr014.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_OPC/lwdwr014.c b/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_OPC/lwdwr014.c new file mode 100644 index 00000000000..af868f09a47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_OPC/lwdwr014.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_OPC/test.desc new file mode 100644 index 00000000000..1e16547709a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr014.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_OPT/lwdwr014.c b/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_OPT/lwdwr014.c new file mode 100644 index 00000000000..af868f09a47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_OPT/lwdwr014.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_OPT/test.desc new file mode 100644 index 00000000000..4d9fd23359a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr014.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_SC_SAFE/lwdwr014.c b/regression/goto-instrument-wmm-core/ppc_lwdwr014_SC_SAFE/lwdwr014.c new file mode 100644 index 00000000000..af868f09a47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_SC_SAFE/lwdwr014.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr014_SC_SAFE/test.desc new file mode 100644 index 00000000000..d5aab26e770 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr014.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_ALL/lwdwr014.c b/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_ALL/lwdwr014.c new file mode 100644 index 00000000000..af868f09a47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_ALL/lwdwr014.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_ALL/test.desc new file mode 100644 index 00000000000..32e71e18c59 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr014.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_OPC/lwdwr014.c b/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_OPC/lwdwr014.c new file mode 100644 index 00000000000..af868f09a47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_OPC/lwdwr014.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_OPC/test.desc new file mode 100644 index 00000000000..007e7601f68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr014.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_OPT/lwdwr014.c b/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_OPT/lwdwr014.c new file mode 100644 index 00000000000..af868f09a47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_OPT/lwdwr014.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_OPT/test.desc new file mode 100644 index 00000000000..a4ebb344d98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr014_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr014.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_CAV11_ERROR/lwdwr015.c b/regression/goto-instrument-wmm-core/ppc_lwdwr015_CAV11_ERROR/lwdwr015.c new file mode 100644 index 00000000000..6627c34f244 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_CAV11_ERROR/lwdwr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr015_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..c5035fba058 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr015.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_ALL/lwdwr015.c b/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_ALL/lwdwr015.c new file mode 100644 index 00000000000..6627c34f244 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_ALL/lwdwr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_ALL/test.desc new file mode 100644 index 00000000000..ebce9a66706 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr015.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_OPC/lwdwr015.c b/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_OPC/lwdwr015.c new file mode 100644 index 00000000000..6627c34f244 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_OPC/lwdwr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_OPC/test.desc new file mode 100644 index 00000000000..dfb2bbd7ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr015.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_OPT/lwdwr015.c b/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_OPT/lwdwr015.c new file mode 100644 index 00000000000..6627c34f244 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_OPT/lwdwr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_OPT/test.desc new file mode 100644 index 00000000000..a2cd66eb7f3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr015.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_ALL/lwdwr015.c b/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_ALL/lwdwr015.c new file mode 100644 index 00000000000..6627c34f244 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_ALL/lwdwr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_ALL/test.desc new file mode 100644 index 00000000000..f1fc212073d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr015.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_OPC/lwdwr015.c b/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_OPC/lwdwr015.c new file mode 100644 index 00000000000..6627c34f244 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_OPC/lwdwr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_OPC/test.desc new file mode 100644 index 00000000000..a077969dfea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr015.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_OPT/lwdwr015.c b/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_OPT/lwdwr015.c new file mode 100644 index 00000000000..6627c34f244 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_OPT/lwdwr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_OPT/test.desc new file mode 100644 index 00000000000..3e38feb5783 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr015.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_ALL/lwdwr015.c b/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_ALL/lwdwr015.c new file mode 100644 index 00000000000..6627c34f244 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_ALL/lwdwr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_ALL/test.desc new file mode 100644 index 00000000000..84d0fd4999d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr015.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_OPC/lwdwr015.c b/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_OPC/lwdwr015.c new file mode 100644 index 00000000000..6627c34f244 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_OPC/lwdwr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_OPC/test.desc new file mode 100644 index 00000000000..53d3a78a033 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr015.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_OPT/lwdwr015.c b/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_OPT/lwdwr015.c new file mode 100644 index 00000000000..6627c34f244 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_OPT/lwdwr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_OPT/test.desc new file mode 100644 index 00000000000..40a65295f20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr015.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_SC_SAFE/lwdwr015.c b/regression/goto-instrument-wmm-core/ppc_lwdwr015_SC_SAFE/lwdwr015.c new file mode 100644 index 00000000000..6627c34f244 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_SC_SAFE/lwdwr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr015_SC_SAFE/test.desc new file mode 100644 index 00000000000..36606dcf466 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr015.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_ALL/lwdwr015.c b/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_ALL/lwdwr015.c new file mode 100644 index 00000000000..6627c34f244 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_ALL/lwdwr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_ALL/test.desc new file mode 100644 index 00000000000..e3e1ba944aa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr015.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_OPC/lwdwr015.c b/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_OPC/lwdwr015.c new file mode 100644 index 00000000000..6627c34f244 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_OPC/lwdwr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_OPC/test.desc new file mode 100644 index 00000000000..1eb869a4df1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr015.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_OPT/lwdwr015.c b/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_OPT/lwdwr015.c new file mode 100644 index 00000000000..6627c34f244 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_OPT/lwdwr015.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_OPT/test.desc new file mode 100644 index 00000000000..8afd3c542e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr015_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr015.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_CAV11_ERROR/lwdwr016.c b/regression/goto-instrument-wmm-core/ppc_lwdwr016_CAV11_ERROR/lwdwr016.c new file mode 100644 index 00000000000..da4adef2dc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_CAV11_ERROR/lwdwr016.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr016_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..3c63ff6deb2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr016.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_POWER_ALL/lwdwr016.c b/regression/goto-instrument-wmm-core/ppc_lwdwr016_POWER_ALL/lwdwr016.c new file mode 100644 index 00000000000..da4adef2dc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_POWER_ALL/lwdwr016.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr016_POWER_ALL/test.desc new file mode 100644 index 00000000000..15316990288 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr016.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_POWER_OPC/lwdwr016.c b/regression/goto-instrument-wmm-core/ppc_lwdwr016_POWER_OPC/lwdwr016.c new file mode 100644 index 00000000000..da4adef2dc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_POWER_OPC/lwdwr016.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr016_POWER_OPC/test.desc new file mode 100644 index 00000000000..e0db9b41570 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr016.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr016_POWER_OPT/test.desc index 41cf2d4e764..304d6f273e7 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwdwr016_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk lwdwr016.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_ALL/lwdwr016.c b/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_ALL/lwdwr016.c new file mode 100644 index 00000000000..da4adef2dc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_ALL/lwdwr016.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_ALL/test.desc new file mode 100644 index 00000000000..92dcaaa301e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr016.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_OPC/lwdwr016.c b/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_OPC/lwdwr016.c new file mode 100644 index 00000000000..da4adef2dc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_OPC/lwdwr016.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_OPC/test.desc new file mode 100644 index 00000000000..f5728e55f4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr016.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_OPT/lwdwr016.c b/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_OPT/lwdwr016.c new file mode 100644 index 00000000000..da4adef2dc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_OPT/lwdwr016.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_OPT/test.desc new file mode 100644 index 00000000000..8638e9b18ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr016.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_ALL/lwdwr016.c b/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_ALL/lwdwr016.c new file mode 100644 index 00000000000..da4adef2dc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_ALL/lwdwr016.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_ALL/test.desc new file mode 100644 index 00000000000..b9e02fccb2b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr016.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_OPC/lwdwr016.c b/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_OPC/lwdwr016.c new file mode 100644 index 00000000000..da4adef2dc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_OPC/lwdwr016.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_OPC/test.desc new file mode 100644 index 00000000000..ae744d2ed4a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr016.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_OPT/lwdwr016.c b/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_OPT/lwdwr016.c new file mode 100644 index 00000000000..da4adef2dc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_OPT/lwdwr016.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_OPT/test.desc new file mode 100644 index 00000000000..a9cb483ae39 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr016.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_SC_SAFE/lwdwr016.c b/regression/goto-instrument-wmm-core/ppc_lwdwr016_SC_SAFE/lwdwr016.c new file mode 100644 index 00000000000..da4adef2dc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_SC_SAFE/lwdwr016.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr016_SC_SAFE/test.desc new file mode 100644 index 00000000000..2e5e40fccd9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr016.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_TSO_ALL/lwdwr016.c b/regression/goto-instrument-wmm-core/ppc_lwdwr016_TSO_ALL/lwdwr016.c new file mode 100644 index 00000000000..da4adef2dc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_TSO_ALL/lwdwr016.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr016_TSO_ALL/test.desc new file mode 100644 index 00000000000..8a16306817a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr016.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_TSO_OPC/lwdwr016.c b/regression/goto-instrument-wmm-core/ppc_lwdwr016_TSO_OPC/lwdwr016.c new file mode 100644 index 00000000000..da4adef2dc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_TSO_OPC/lwdwr016.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr016_TSO_OPC/test.desc new file mode 100644 index 00000000000..c1cac39b5af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr016.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr016_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr016_TSO_OPT/test.desc index c1f7dc95189..ca0713be842 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwdwr016_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr016_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk lwdwr016.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_CAV11_ERROR/lwdwr017.c b/regression/goto-instrument-wmm-core/ppc_lwdwr017_CAV11_ERROR/lwdwr017.c new file mode 100644 index 00000000000..0448944b183 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_CAV11_ERROR/lwdwr017.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr017_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..bd8f0e5221a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr017.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_POWER_ALL/lwdwr017.c b/regression/goto-instrument-wmm-core/ppc_lwdwr017_POWER_ALL/lwdwr017.c new file mode 100644 index 00000000000..0448944b183 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_POWER_ALL/lwdwr017.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr017_POWER_ALL/test.desc new file mode 100644 index 00000000000..0c589e846b6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr017.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_POWER_OPC/lwdwr017.c b/regression/goto-instrument-wmm-core/ppc_lwdwr017_POWER_OPC/lwdwr017.c new file mode 100644 index 00000000000..0448944b183 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_POWER_OPC/lwdwr017.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr017_POWER_OPC/test.desc new file mode 100644 index 00000000000..5a0abb39f88 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr017.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr017_POWER_OPT/test.desc index d2245604249..4b44b4eb4a6 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwdwr017_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk lwdwr017.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_ALL/lwdwr017.c b/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_ALL/lwdwr017.c new file mode 100644 index 00000000000..0448944b183 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_ALL/lwdwr017.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_ALL/test.desc new file mode 100644 index 00000000000..ecec2adcf6a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr017.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_OPC/lwdwr017.c b/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_OPC/lwdwr017.c new file mode 100644 index 00000000000..0448944b183 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_OPC/lwdwr017.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_OPC/test.desc new file mode 100644 index 00000000000..02769515748 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr017.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_OPT/lwdwr017.c b/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_OPT/lwdwr017.c new file mode 100644 index 00000000000..0448944b183 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_OPT/lwdwr017.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_OPT/test.desc new file mode 100644 index 00000000000..3aa66f11324 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr017.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_ALL/lwdwr017.c b/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_ALL/lwdwr017.c new file mode 100644 index 00000000000..0448944b183 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_ALL/lwdwr017.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_ALL/test.desc new file mode 100644 index 00000000000..3e4bc3a355b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr017.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_OPC/lwdwr017.c b/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_OPC/lwdwr017.c new file mode 100644 index 00000000000..0448944b183 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_OPC/lwdwr017.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_OPC/test.desc new file mode 100644 index 00000000000..0a071addd65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr017.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_OPT/lwdwr017.c b/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_OPT/lwdwr017.c new file mode 100644 index 00000000000..0448944b183 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_OPT/lwdwr017.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_OPT/test.desc new file mode 100644 index 00000000000..3319f863397 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr017.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_SC_SAFE/lwdwr017.c b/regression/goto-instrument-wmm-core/ppc_lwdwr017_SC_SAFE/lwdwr017.c new file mode 100644 index 00000000000..0448944b183 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_SC_SAFE/lwdwr017.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr017_SC_SAFE/test.desc new file mode 100644 index 00000000000..f5ecb100606 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr017.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_ALL/lwdwr017.c b/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_ALL/lwdwr017.c new file mode 100644 index 00000000000..0448944b183 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_ALL/lwdwr017.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_ALL/test.desc new file mode 100644 index 00000000000..74ddfd06e3e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr017.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_OPC/lwdwr017.c b/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_OPC/lwdwr017.c new file mode 100644 index 00000000000..0448944b183 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_OPC/lwdwr017.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_OPC/test.desc new file mode 100644 index 00000000000..1724d9c4f0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr017.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_OPT/lwdwr017.c b/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_OPT/lwdwr017.c new file mode 100644 index 00000000000..0448944b183 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_OPT/lwdwr017.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r3 == 0 && __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_OPT/test.desc new file mode 100644 index 00000000000..610d4d9de52 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr017_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr017.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_CAV11_ERROR/lwdwr018.c b/regression/goto-instrument-wmm-core/ppc_lwdwr018_CAV11_ERROR/lwdwr018.c new file mode 100644 index 00000000000..f44c24ad82e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_CAV11_ERROR/lwdwr018.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr018_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..461511f3045 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr018.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_ALL/lwdwr018.c b/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_ALL/lwdwr018.c new file mode 100644 index 00000000000..f44c24ad82e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_ALL/lwdwr018.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_ALL/test.desc new file mode 100644 index 00000000000..f5d8e63269f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr018.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_OPC/lwdwr018.c b/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_OPC/lwdwr018.c new file mode 100644 index 00000000000..f44c24ad82e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_OPC/lwdwr018.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_OPC/test.desc new file mode 100644 index 00000000000..4f4bdffba13 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr018.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_OPT/lwdwr018.c b/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_OPT/lwdwr018.c new file mode 100644 index 00000000000..f44c24ad82e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_OPT/lwdwr018.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_OPT/test.desc new file mode 100644 index 00000000000..cede33685f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr018.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_ALL/lwdwr018.c b/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_ALL/lwdwr018.c new file mode 100644 index 00000000000..f44c24ad82e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_ALL/lwdwr018.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_ALL/test.desc new file mode 100644 index 00000000000..db80bf9838e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr018.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_OPC/lwdwr018.c b/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_OPC/lwdwr018.c new file mode 100644 index 00000000000..f44c24ad82e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_OPC/lwdwr018.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_OPC/test.desc new file mode 100644 index 00000000000..7b99939c25c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr018.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_OPT/lwdwr018.c b/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_OPT/lwdwr018.c new file mode 100644 index 00000000000..f44c24ad82e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_OPT/lwdwr018.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_OPT/test.desc new file mode 100644 index 00000000000..4133f091b08 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr018.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_ALL/lwdwr018.c b/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_ALL/lwdwr018.c new file mode 100644 index 00000000000..f44c24ad82e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_ALL/lwdwr018.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_ALL/test.desc new file mode 100644 index 00000000000..2c21815b741 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr018.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_OPC/lwdwr018.c b/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_OPC/lwdwr018.c new file mode 100644 index 00000000000..f44c24ad82e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_OPC/lwdwr018.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_OPC/test.desc new file mode 100644 index 00000000000..2ca59994e47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr018.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_OPT/lwdwr018.c b/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_OPT/lwdwr018.c new file mode 100644 index 00000000000..f44c24ad82e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_OPT/lwdwr018.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_OPT/test.desc new file mode 100644 index 00000000000..806a9e73cb1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr018.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_SC_SAFE/lwdwr018.c b/regression/goto-instrument-wmm-core/ppc_lwdwr018_SC_SAFE/lwdwr018.c new file mode 100644 index 00000000000..f44c24ad82e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_SC_SAFE/lwdwr018.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr018_SC_SAFE/test.desc new file mode 100644 index 00000000000..83d3cbeb3db --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr018.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_ALL/lwdwr018.c b/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_ALL/lwdwr018.c new file mode 100644 index 00000000000..f44c24ad82e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_ALL/lwdwr018.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_ALL/test.desc new file mode 100644 index 00000000000..e1b6a72b9cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr018.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_OPC/lwdwr018.c b/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_OPC/lwdwr018.c new file mode 100644 index 00000000000..f44c24ad82e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_OPC/lwdwr018.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_OPC/test.desc new file mode 100644 index 00000000000..23f3e5a8bd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr018.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_OPT/lwdwr018.c b/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_OPT/lwdwr018.c new file mode 100644 index 00000000000..f44c24ad82e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_OPT/lwdwr018.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_OPT/test.desc new file mode 100644 index 00000000000..8e6e4e050f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr018_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr018.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_CAV11_ERROR/lwdwr019.c b/regression/goto-instrument-wmm-core/ppc_lwdwr019_CAV11_ERROR/lwdwr019.c new file mode 100644 index 00000000000..c682b33506e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_CAV11_ERROR/lwdwr019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr019_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..3c7e3d6cb2b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr019.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_POWER_ALL/lwdwr019.c b/regression/goto-instrument-wmm-core/ppc_lwdwr019_POWER_ALL/lwdwr019.c new file mode 100644 index 00000000000..c682b33506e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_POWER_ALL/lwdwr019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr019_POWER_ALL/test.desc new file mode 100644 index 00000000000..22411e211b5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr019.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_POWER_OPC/lwdwr019.c b/regression/goto-instrument-wmm-core/ppc_lwdwr019_POWER_OPC/lwdwr019.c new file mode 100644 index 00000000000..c682b33506e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_POWER_OPC/lwdwr019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr019_POWER_OPC/test.desc new file mode 100644 index 00000000000..9c938fbad07 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr019.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr019_POWER_OPT/test.desc index b0aeda5bde6..2a2152eac7b 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwdwr019_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk lwdwr019.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_ALL/lwdwr019.c b/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_ALL/lwdwr019.c new file mode 100644 index 00000000000..c682b33506e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_ALL/lwdwr019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_ALL/test.desc new file mode 100644 index 00000000000..dad0a2c2a7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr019.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_OPC/lwdwr019.c b/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_OPC/lwdwr019.c new file mode 100644 index 00000000000..c682b33506e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_OPC/lwdwr019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_OPC/test.desc new file mode 100644 index 00000000000..0d2832564d3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr019.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_OPT/lwdwr019.c b/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_OPT/lwdwr019.c new file mode 100644 index 00000000000..c682b33506e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_OPT/lwdwr019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_OPT/test.desc new file mode 100644 index 00000000000..03f9515d29c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr019.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_ALL/lwdwr019.c b/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_ALL/lwdwr019.c new file mode 100644 index 00000000000..c682b33506e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_ALL/lwdwr019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_ALL/test.desc new file mode 100644 index 00000000000..0d5cde47e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr019.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_OPC/lwdwr019.c b/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_OPC/lwdwr019.c new file mode 100644 index 00000000000..c682b33506e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_OPC/lwdwr019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_OPC/test.desc new file mode 100644 index 00000000000..d5abe21cdae --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr019.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_OPT/lwdwr019.c b/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_OPT/lwdwr019.c new file mode 100644 index 00000000000..c682b33506e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_OPT/lwdwr019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_OPT/test.desc new file mode 100644 index 00000000000..4e59267f42d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr019.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_SC_SAFE/lwdwr019.c b/regression/goto-instrument-wmm-core/ppc_lwdwr019_SC_SAFE/lwdwr019.c new file mode 100644 index 00000000000..c682b33506e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_SC_SAFE/lwdwr019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr019_SC_SAFE/test.desc new file mode 100644 index 00000000000..fc60db37f3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr019.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_TSO_ALL/lwdwr019.c b/regression/goto-instrument-wmm-core/ppc_lwdwr019_TSO_ALL/lwdwr019.c new file mode 100644 index 00000000000..c682b33506e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_TSO_ALL/lwdwr019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr019_TSO_ALL/test.desc new file mode 100644 index 00000000000..58650f51664 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr019.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_TSO_OPC/lwdwr019.c b/regression/goto-instrument-wmm-core/ppc_lwdwr019_TSO_OPC/lwdwr019.c new file mode 100644 index 00000000000..c682b33506e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_TSO_OPC/lwdwr019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr019_TSO_OPC/test.desc new file mode 100644 index 00000000000..98ce7f5c373 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr019.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr019_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr019_TSO_OPT/test.desc index f7138656a69..28f1ab66370 100644 --- a/regression/goto-instrument-wmm-core/ppc_lwdwr019_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr019_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk lwdwr019.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_CAV11_ERROR/lwdwr020.c b/regression/goto-instrument-wmm-core/ppc_lwdwr020_CAV11_ERROR/lwdwr020.c new file mode 100644 index 00000000000..d50b6391585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_CAV11_ERROR/lwdwr020.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr020_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..dc592d9432c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr020.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_ALL/lwdwr020.c b/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_ALL/lwdwr020.c new file mode 100644 index 00000000000..d50b6391585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_ALL/lwdwr020.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_ALL/test.desc new file mode 100644 index 00000000000..4bf6cc55842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr020.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_OPC/lwdwr020.c b/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_OPC/lwdwr020.c new file mode 100644 index 00000000000..d50b6391585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_OPC/lwdwr020.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_OPC/test.desc new file mode 100644 index 00000000000..9f853ad2212 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr020.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_OPT/lwdwr020.c b/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_OPT/lwdwr020.c new file mode 100644 index 00000000000..d50b6391585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_OPT/lwdwr020.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_OPT/test.desc new file mode 100644 index 00000000000..a73f7f4445e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr020.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_ALL/lwdwr020.c b/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_ALL/lwdwr020.c new file mode 100644 index 00000000000..d50b6391585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_ALL/lwdwr020.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_ALL/test.desc new file mode 100644 index 00000000000..6bbabd55b33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr020.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_OPC/lwdwr020.c b/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_OPC/lwdwr020.c new file mode 100644 index 00000000000..d50b6391585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_OPC/lwdwr020.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_OPC/test.desc new file mode 100644 index 00000000000..e06a4d22f1c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr020.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_OPT/lwdwr020.c b/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_OPT/lwdwr020.c new file mode 100644 index 00000000000..d50b6391585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_OPT/lwdwr020.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_OPT/test.desc new file mode 100644 index 00000000000..f5e68a9aeb8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr020.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_ALL/lwdwr020.c b/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_ALL/lwdwr020.c new file mode 100644 index 00000000000..d50b6391585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_ALL/lwdwr020.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_ALL/test.desc new file mode 100644 index 00000000000..4cbb7053f05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr020.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_OPC/lwdwr020.c b/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_OPC/lwdwr020.c new file mode 100644 index 00000000000..d50b6391585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_OPC/lwdwr020.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_OPC/test.desc new file mode 100644 index 00000000000..04d9323d961 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr020.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_OPT/lwdwr020.c b/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_OPT/lwdwr020.c new file mode 100644 index 00000000000..d50b6391585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_OPT/lwdwr020.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_OPT/test.desc new file mode 100644 index 00000000000..c511fb62da2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr020.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_SC_SAFE/lwdwr020.c b/regression/goto-instrument-wmm-core/ppc_lwdwr020_SC_SAFE/lwdwr020.c new file mode 100644 index 00000000000..d50b6391585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_SC_SAFE/lwdwr020.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr020_SC_SAFE/test.desc new file mode 100644 index 00000000000..e1baa7b7331 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr020.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_ALL/lwdwr020.c b/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_ALL/lwdwr020.c new file mode 100644 index 00000000000..d50b6391585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_ALL/lwdwr020.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_ALL/test.desc new file mode 100644 index 00000000000..01117bc6952 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr020.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_OPC/lwdwr020.c b/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_OPC/lwdwr020.c new file mode 100644 index 00000000000..d50b6391585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_OPC/lwdwr020.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_OPC/test.desc new file mode 100644 index 00000000000..a21e20246e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr020.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_OPT/lwdwr020.c b/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_OPT/lwdwr020.c new file mode 100644 index 00000000000..d50b6391585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_OPT/lwdwr020.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_OPT/test.desc new file mode 100644 index 00000000000..d562f4cd04a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr020_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr020.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_CAV11_ERROR/lwdwr021.c b/regression/goto-instrument-wmm-core/ppc_lwdwr021_CAV11_ERROR/lwdwr021.c new file mode 100644 index 00000000000..a584dcc86e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_CAV11_ERROR/lwdwr021.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr021_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..675c252a75f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr021.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_ALL/lwdwr021.c b/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_ALL/lwdwr021.c new file mode 100644 index 00000000000..a584dcc86e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_ALL/lwdwr021.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_ALL/test.desc new file mode 100644 index 00000000000..4fd23985e0a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr021.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_OPC/lwdwr021.c b/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_OPC/lwdwr021.c new file mode 100644 index 00000000000..a584dcc86e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_OPC/lwdwr021.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_OPC/test.desc new file mode 100644 index 00000000000..0d11fae7c5d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr021.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_OPT/lwdwr021.c b/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_OPT/lwdwr021.c new file mode 100644 index 00000000000..a584dcc86e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_OPT/lwdwr021.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_OPT/test.desc new file mode 100644 index 00000000000..011681a3056 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr021.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_ALL/lwdwr021.c b/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_ALL/lwdwr021.c new file mode 100644 index 00000000000..a584dcc86e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_ALL/lwdwr021.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_ALL/test.desc new file mode 100644 index 00000000000..40bcc4945b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr021.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_OPC/lwdwr021.c b/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_OPC/lwdwr021.c new file mode 100644 index 00000000000..a584dcc86e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_OPC/lwdwr021.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_OPC/test.desc new file mode 100644 index 00000000000..2ad067fd6ae --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr021.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_OPT/lwdwr021.c b/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_OPT/lwdwr021.c new file mode 100644 index 00000000000..a584dcc86e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_OPT/lwdwr021.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_OPT/test.desc new file mode 100644 index 00000000000..447b1089b93 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr021.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_ALL/lwdwr021.c b/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_ALL/lwdwr021.c new file mode 100644 index 00000000000..a584dcc86e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_ALL/lwdwr021.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_ALL/test.desc new file mode 100644 index 00000000000..b29deaf1c8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr021.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_OPC/lwdwr021.c b/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_OPC/lwdwr021.c new file mode 100644 index 00000000000..a584dcc86e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_OPC/lwdwr021.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_OPC/test.desc new file mode 100644 index 00000000000..1cf6daef9ca --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr021.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_OPT/lwdwr021.c b/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_OPT/lwdwr021.c new file mode 100644 index 00000000000..a584dcc86e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_OPT/lwdwr021.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_OPT/test.desc new file mode 100644 index 00000000000..b4bbc174485 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr021.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_SC_SAFE/lwdwr021.c b/regression/goto-instrument-wmm-core/ppc_lwdwr021_SC_SAFE/lwdwr021.c new file mode 100644 index 00000000000..a584dcc86e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_SC_SAFE/lwdwr021.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr021_SC_SAFE/test.desc new file mode 100644 index 00000000000..c200c6db802 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr021.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_ALL/lwdwr021.c b/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_ALL/lwdwr021.c new file mode 100644 index 00000000000..a584dcc86e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_ALL/lwdwr021.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_ALL/test.desc new file mode 100644 index 00000000000..f6135aa954a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr021.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_OPC/lwdwr021.c b/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_OPC/lwdwr021.c new file mode 100644 index 00000000000..a584dcc86e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_OPC/lwdwr021.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_OPC/test.desc new file mode 100644 index 00000000000..46921c80236 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwdwr021.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_OPT/lwdwr021.c b/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_OPT/lwdwr021.c new file mode 100644 index 00000000000..a584dcc86e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_OPT/lwdwr021.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_OPT/test.desc new file mode 100644 index 00000000000..6e968b6bb3d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwdwr021_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwdwr021.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_CAV11_ERROR/lwswr000.c b/regression/goto-instrument-wmm-core/ppc_lwswr000_CAV11_ERROR/lwswr000.c new file mode 100644 index 00000000000..cbb15acf714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_CAV11_ERROR/lwswr000.c @@ -0,0 +1,96 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int __unbuffered_p3_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = y; + __unbuffered_p3_r4 = __unbuffered_p3_r3 ^ __unbuffered_p3_r3; + __unbuffered_p3_r5 = *(&x + __unbuffered_p3_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r3 == 1 && __unbuffered_p3_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..e5d54802c8a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_ALL/lwswr000.c b/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_ALL/lwswr000.c new file mode 100644 index 00000000000..cbb15acf714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_ALL/lwswr000.c @@ -0,0 +1,96 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int __unbuffered_p3_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = y; + __unbuffered_p3_r4 = __unbuffered_p3_r3 ^ __unbuffered_p3_r3; + __unbuffered_p3_r5 = *(&x + __unbuffered_p3_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r3 == 1 && __unbuffered_p3_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_ALL/test.desc new file mode 100644 index 00000000000..f91c9bb011a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_OPC/lwswr000.c b/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_OPC/lwswr000.c new file mode 100644 index 00000000000..cbb15acf714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_OPC/lwswr000.c @@ -0,0 +1,96 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int __unbuffered_p3_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = y; + __unbuffered_p3_r4 = __unbuffered_p3_r3 ^ __unbuffered_p3_r3; + __unbuffered_p3_r5 = *(&x + __unbuffered_p3_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r3 == 1 && __unbuffered_p3_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_OPC/test.desc new file mode 100644 index 00000000000..58307c941c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_OPT/lwswr000.c b/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_OPT/lwswr000.c new file mode 100644 index 00000000000..cbb15acf714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_OPT/lwswr000.c @@ -0,0 +1,96 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int __unbuffered_p3_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = y; + __unbuffered_p3_r4 = __unbuffered_p3_r3 ^ __unbuffered_p3_r3; + __unbuffered_p3_r5 = *(&x + __unbuffered_p3_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r3 == 1 && __unbuffered_p3_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_OPT/test.desc new file mode 100644 index 00000000000..a587918138b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwswr000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_ALL/lwswr000.c b/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_ALL/lwswr000.c new file mode 100644 index 00000000000..cbb15acf714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_ALL/lwswr000.c @@ -0,0 +1,96 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int __unbuffered_p3_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = y; + __unbuffered_p3_r4 = __unbuffered_p3_r3 ^ __unbuffered_p3_r3; + __unbuffered_p3_r5 = *(&x + __unbuffered_p3_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r3 == 1 && __unbuffered_p3_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_ALL/test.desc new file mode 100644 index 00000000000..96b6adc3709 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +lwswr000.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_OPC/lwswr000.c b/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_OPC/lwswr000.c new file mode 100644 index 00000000000..cbb15acf714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_OPC/lwswr000.c @@ -0,0 +1,96 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int __unbuffered_p3_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = y; + __unbuffered_p3_r4 = __unbuffered_p3_r3 ^ __unbuffered_p3_r3; + __unbuffered_p3_r5 = *(&x + __unbuffered_p3_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r3 == 1 && __unbuffered_p3_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_OPC/test.desc new file mode 100644 index 00000000000..bd1c4288f34 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +lwswr000.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_OPT/lwswr000.c b/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_OPT/lwswr000.c new file mode 100644 index 00000000000..cbb15acf714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_OPT/lwswr000.c @@ -0,0 +1,96 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int __unbuffered_p3_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = y; + __unbuffered_p3_r4 = __unbuffered_p3_r3 ^ __unbuffered_p3_r3; + __unbuffered_p3_r5 = *(&x + __unbuffered_p3_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r3 == 1 && __unbuffered_p3_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_OPT/test.desc new file mode 100644 index 00000000000..7853846a143 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +lwswr000.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_ALL/lwswr000.c b/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_ALL/lwswr000.c new file mode 100644 index 00000000000..cbb15acf714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_ALL/lwswr000.c @@ -0,0 +1,96 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int __unbuffered_p3_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = y; + __unbuffered_p3_r4 = __unbuffered_p3_r3 ^ __unbuffered_p3_r3; + __unbuffered_p3_r5 = *(&x + __unbuffered_p3_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r3 == 1 && __unbuffered_p3_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_ALL/test.desc new file mode 100644 index 00000000000..0a8b778ad66 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +lwswr000.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_OPC/lwswr000.c b/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_OPC/lwswr000.c new file mode 100644 index 00000000000..cbb15acf714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_OPC/lwswr000.c @@ -0,0 +1,96 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int __unbuffered_p3_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = y; + __unbuffered_p3_r4 = __unbuffered_p3_r3 ^ __unbuffered_p3_r3; + __unbuffered_p3_r5 = *(&x + __unbuffered_p3_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r3 == 1 && __unbuffered_p3_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_OPC/test.desc new file mode 100644 index 00000000000..a5d5b02bae6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +lwswr000.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_OPT/lwswr000.c b/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_OPT/lwswr000.c new file mode 100644 index 00000000000..cbb15acf714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_OPT/lwswr000.c @@ -0,0 +1,96 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int __unbuffered_p3_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = y; + __unbuffered_p3_r4 = __unbuffered_p3_r3 ^ __unbuffered_p3_r3; + __unbuffered_p3_r5 = *(&x + __unbuffered_p3_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r3 == 1 && __unbuffered_p3_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_OPT/test.desc new file mode 100644 index 00000000000..1a7306c311d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +lwswr000.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_SC_SAFE/lwswr000.c b/regression/goto-instrument-wmm-core/ppc_lwswr000_SC_SAFE/lwswr000.c new file mode 100644 index 00000000000..cbb15acf714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_SC_SAFE/lwswr000.c @@ -0,0 +1,96 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int __unbuffered_p3_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = y; + __unbuffered_p3_r4 = __unbuffered_p3_r3 ^ __unbuffered_p3_r3; + __unbuffered_p3_r5 = *(&x + __unbuffered_p3_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r3 == 1 && __unbuffered_p3_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr000_SC_SAFE/test.desc new file mode 100644 index 00000000000..047a9664e34 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_ALL/lwswr000.c b/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_ALL/lwswr000.c new file mode 100644 index 00000000000..cbb15acf714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_ALL/lwswr000.c @@ -0,0 +1,96 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int __unbuffered_p3_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = y; + __unbuffered_p3_r4 = __unbuffered_p3_r3 ^ __unbuffered_p3_r3; + __unbuffered_p3_r5 = *(&x + __unbuffered_p3_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r3 == 1 && __unbuffered_p3_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_ALL/test.desc new file mode 100644 index 00000000000..7b4b419ce0d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +lwswr000.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_OPC/lwswr000.c b/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_OPC/lwswr000.c new file mode 100644 index 00000000000..cbb15acf714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_OPC/lwswr000.c @@ -0,0 +1,96 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int __unbuffered_p3_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = y; + __unbuffered_p3_r4 = __unbuffered_p3_r3 ^ __unbuffered_p3_r3; + __unbuffered_p3_r5 = *(&x + __unbuffered_p3_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r3 == 1 && __unbuffered_p3_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_OPC/test.desc new file mode 100644 index 00000000000..49d13078cac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +lwswr000.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_OPT/lwswr000.c b/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_OPT/lwswr000.c new file mode 100644 index 00000000000..cbb15acf714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_OPT/lwswr000.c @@ -0,0 +1,96 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int __unbuffered_p3_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + lwfence(); + __unbuffered_p3_r3 = y; + __unbuffered_p3_r4 = __unbuffered_p3_r3 ^ __unbuffered_p3_r3; + __unbuffered_p3_r5 = *(&x + __unbuffered_p3_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r3 == 1 && __unbuffered_p3_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_OPT/test.desc new file mode 100644 index 00000000000..604daf2cede --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +lwswr000.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_CAV11_ERROR/lwswr001.c b/regression/goto-instrument-wmm-core/ppc_lwswr001_CAV11_ERROR/lwswr001.c new file mode 100644 index 00000000000..3c80650c0b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_CAV11_ERROR/lwswr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r5 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr001_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..4822bf9abba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr001.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_ALL/lwswr001.c b/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_ALL/lwswr001.c new file mode 100644 index 00000000000..3c80650c0b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_ALL/lwswr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r5 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_ALL/test.desc new file mode 100644 index 00000000000..e19bf78800b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_OPC/lwswr001.c b/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_OPC/lwswr001.c new file mode 100644 index 00000000000..3c80650c0b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_OPC/lwswr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r5 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_OPC/test.desc new file mode 100644 index 00000000000..b3938957725 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_OPT/lwswr001.c b/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_OPT/lwswr001.c new file mode 100644 index 00000000000..3c80650c0b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_OPT/lwswr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r5 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_OPT/test.desc new file mode 100644 index 00000000000..05866c624b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwswr001.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_ALL/lwswr001.c b/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_ALL/lwswr001.c new file mode 100644 index 00000000000..3c80650c0b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_ALL/lwswr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r5 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_ALL/test.desc new file mode 100644 index 00000000000..68b53d4f07e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +lwswr001.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_OPC/lwswr001.c b/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_OPC/lwswr001.c new file mode 100644 index 00000000000..3c80650c0b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_OPC/lwswr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r5 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_OPC/test.desc new file mode 100644 index 00000000000..bea9ca60b7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr001.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_OPT/lwswr001.c b/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_OPT/lwswr001.c new file mode 100644 index 00000000000..3c80650c0b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_OPT/lwswr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r5 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_OPT/test.desc new file mode 100644 index 00000000000..d016e3018ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwswr001.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_ALL/lwswr001.c b/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_ALL/lwswr001.c new file mode 100644 index 00000000000..3c80650c0b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_ALL/lwswr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r5 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_ALL/test.desc new file mode 100644 index 00000000000..79990199ef8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +lwswr001.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_OPC/lwswr001.c b/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_OPC/lwswr001.c new file mode 100644 index 00000000000..3c80650c0b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_OPC/lwswr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r5 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_OPC/test.desc new file mode 100644 index 00000000000..d0eb091a54a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr001.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_OPT/lwswr001.c b/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_OPT/lwswr001.c new file mode 100644 index 00000000000..3c80650c0b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_OPT/lwswr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r5 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_OPT/test.desc new file mode 100644 index 00000000000..67b8022e626 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwswr001.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_SC_SAFE/lwswr001.c b/regression/goto-instrument-wmm-core/ppc_lwswr001_SC_SAFE/lwswr001.c new file mode 100644 index 00000000000..3c80650c0b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_SC_SAFE/lwswr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r5 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr001_SC_SAFE/test.desc new file mode 100644 index 00000000000..baa6609e92a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_ALL/lwswr001.c b/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_ALL/lwswr001.c new file mode 100644 index 00000000000..3c80650c0b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_ALL/lwswr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r5 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_ALL/test.desc new file mode 100644 index 00000000000..4f88673886b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +lwswr001.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_OPC/lwswr001.c b/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_OPC/lwswr001.c new file mode 100644 index 00000000000..3c80650c0b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_OPC/lwswr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r5 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_OPC/test.desc new file mode 100644 index 00000000000..c1a49d7c20e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr001.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_OPT/lwswr001.c b/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_OPT/lwswr001.c new file mode 100644 index 00000000000..3c80650c0b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_OPT/lwswr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = y; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r5 == 0 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_OPT/test.desc new file mode 100644 index 00000000000..57aebe336db --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwswr001.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_CAV11_ERROR/lwswr002.c b/regression/goto-instrument-wmm-core/ppc_lwswr002_CAV11_ERROR/lwswr002.c new file mode 100644 index 00000000000..8fbce92a0a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_CAV11_ERROR/lwswr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr002_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..731ba470177 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr002.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_ALL/lwswr002.c b/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_ALL/lwswr002.c new file mode 100644 index 00000000000..8fbce92a0a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_ALL/lwswr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_ALL/test.desc new file mode 100644 index 00000000000..c0d7802daa3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr002.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_OPC/lwswr002.c b/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_OPC/lwswr002.c new file mode 100644 index 00000000000..8fbce92a0a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_OPC/lwswr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_OPC/test.desc new file mode 100644 index 00000000000..df6241af803 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr002.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_OPT/lwswr002.c b/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_OPT/lwswr002.c new file mode 100644 index 00000000000..8fbce92a0a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_OPT/lwswr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_OPT/test.desc new file mode 100644 index 00000000000..62d5ccb8d34 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwswr002.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_ALL/lwswr002.c b/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_ALL/lwswr002.c new file mode 100644 index 00000000000..8fbce92a0a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_ALL/lwswr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_ALL/test.desc new file mode 100644 index 00000000000..01ef2281c30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr002.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_OPC/lwswr002.c b/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_OPC/lwswr002.c new file mode 100644 index 00000000000..8fbce92a0a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_OPC/lwswr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_OPC/test.desc new file mode 100644 index 00000000000..f0422f6f5e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr002.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_OPT/lwswr002.c b/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_OPT/lwswr002.c new file mode 100644 index 00000000000..8fbce92a0a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_OPT/lwswr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_OPT/test.desc new file mode 100644 index 00000000000..fcb8c4168ac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwswr002.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_ALL/lwswr002.c b/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_ALL/lwswr002.c new file mode 100644 index 00000000000..8fbce92a0a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_ALL/lwswr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_ALL/test.desc new file mode 100644 index 00000000000..41ee75450eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr002.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_OPC/lwswr002.c b/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_OPC/lwswr002.c new file mode 100644 index 00000000000..8fbce92a0a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_OPC/lwswr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_OPC/test.desc new file mode 100644 index 00000000000..0bf1b9a6823 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr002.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_OPT/lwswr002.c b/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_OPT/lwswr002.c new file mode 100644 index 00000000000..8fbce92a0a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_OPT/lwswr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_OPT/test.desc new file mode 100644 index 00000000000..a5f4ede47c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwswr002.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_SC_SAFE/lwswr002.c b/regression/goto-instrument-wmm-core/ppc_lwswr002_SC_SAFE/lwswr002.c new file mode 100644 index 00000000000..8fbce92a0a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_SC_SAFE/lwswr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr002_SC_SAFE/test.desc new file mode 100644 index 00000000000..1e303edeccb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr002.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_ALL/lwswr002.c b/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_ALL/lwswr002.c new file mode 100644 index 00000000000..8fbce92a0a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_ALL/lwswr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_ALL/test.desc new file mode 100644 index 00000000000..fe75b7c938d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr002.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_OPC/lwswr002.c b/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_OPC/lwswr002.c new file mode 100644 index 00000000000..8fbce92a0a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_OPC/lwswr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_OPC/test.desc new file mode 100644 index 00000000000..e27033af4bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr002.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_OPT/lwswr002.c b/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_OPT/lwswr002.c new file mode 100644 index 00000000000..8fbce92a0a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_OPT/lwswr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_OPT/test.desc new file mode 100644 index 00000000000..ad77832e689 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr002_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwswr002.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_CAV11_ERROR/lwswr003.c b/regression/goto-instrument-wmm-core/ppc_lwswr003_CAV11_ERROR/lwswr003.c new file mode 100644 index 00000000000..504a017b14c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_CAV11_ERROR/lwswr003.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&z + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + z = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr003_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..af9ef7b8978 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr003.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_ALL/lwswr003.c b/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_ALL/lwswr003.c new file mode 100644 index 00000000000..504a017b14c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_ALL/lwswr003.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&z + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + z = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_ALL/test.desc new file mode 100644 index 00000000000..6bae3eef855 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr003.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_OPC/lwswr003.c b/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_OPC/lwswr003.c new file mode 100644 index 00000000000..504a017b14c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_OPC/lwswr003.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&z + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + z = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_OPC/test.desc new file mode 100644 index 00000000000..2ea76773b32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr003.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_OPT/lwswr003.c b/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_OPT/lwswr003.c new file mode 100644 index 00000000000..504a017b14c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_OPT/lwswr003.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&z + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + z = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_OPT/test.desc new file mode 100644 index 00000000000..7ed608394f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwswr003.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_ALL/lwswr003.c b/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_ALL/lwswr003.c new file mode 100644 index 00000000000..504a017b14c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_ALL/lwswr003.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&z + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + z = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_ALL/test.desc new file mode 100644 index 00000000000..d5424d4971f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr003.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_OPC/lwswr003.c b/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_OPC/lwswr003.c new file mode 100644 index 00000000000..504a017b14c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_OPC/lwswr003.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&z + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + z = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_OPC/test.desc new file mode 100644 index 00000000000..e1a85531b79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr003.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_OPT/lwswr003.c b/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_OPT/lwswr003.c new file mode 100644 index 00000000000..504a017b14c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_OPT/lwswr003.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&z + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + z = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_OPT/test.desc new file mode 100644 index 00000000000..a30b7e1e36f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwswr003.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_ALL/lwswr003.c b/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_ALL/lwswr003.c new file mode 100644 index 00000000000..504a017b14c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_ALL/lwswr003.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&z + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + z = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_ALL/test.desc new file mode 100644 index 00000000000..e2524e0d7df --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr003.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_OPC/lwswr003.c b/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_OPC/lwswr003.c new file mode 100644 index 00000000000..504a017b14c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_OPC/lwswr003.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&z + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + z = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_OPC/test.desc new file mode 100644 index 00000000000..a7ab841f798 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr003.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_OPT/lwswr003.c b/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_OPT/lwswr003.c new file mode 100644 index 00000000000..504a017b14c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_OPT/lwswr003.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&z + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + z = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_OPT/test.desc new file mode 100644 index 00000000000..d4687b34681 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwswr003.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_SC_SAFE/lwswr003.c b/regression/goto-instrument-wmm-core/ppc_lwswr003_SC_SAFE/lwswr003.c new file mode 100644 index 00000000000..504a017b14c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_SC_SAFE/lwswr003.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&z + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + z = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr003_SC_SAFE/test.desc new file mode 100644 index 00000000000..4ba209b46b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr003.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_ALL/lwswr003.c b/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_ALL/lwswr003.c new file mode 100644 index 00000000000..504a017b14c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_ALL/lwswr003.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&z + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + z = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_ALL/test.desc new file mode 100644 index 00000000000..f4622eb11f2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr003.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_OPC/lwswr003.c b/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_OPC/lwswr003.c new file mode 100644 index 00000000000..504a017b14c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_OPC/lwswr003.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&z + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + z = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_OPC/test.desc new file mode 100644 index 00000000000..7c64e945d91 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +lwswr003.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_OPT/lwswr003.c b/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_OPT/lwswr003.c new file mode 100644 index 00000000000..504a017b14c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_OPT/lwswr003.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&z + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + z = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = z; + __unbuffered_p2_r4 = __unbuffered_p2_r3 ^ __unbuffered_p2_r3; + __unbuffered_p2_r5 = *(&x + __unbuffered_p2_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r5 == 0 && __unbuffered_p1_r5 == 0 && + __unbuffered_p2_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_OPT/test.desc new file mode 100644 index 00000000000..493e596ce45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_lwswr003_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +lwswr003.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_CAV11_ERROR/mix000.c b/regression/goto-instrument-wmm-core/ppc_mix000_CAV11_ERROR/mix000.c new file mode 100644 index 00000000000..761c44e999e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_CAV11_ERROR/mix000.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&z + __unbuffered_p1_r4) = __unbuffered_p1_r5; + __unbuffered_p1_r7 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_mix000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..208b989077e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_PSO_ALL/mix000.c b/regression/goto-instrument-wmm-core/ppc_mix000_PSO_ALL/mix000.c new file mode 100644 index 00000000000..761c44e999e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_PSO_ALL/mix000.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&z + __unbuffered_p1_r4) = __unbuffered_p1_r5; + __unbuffered_p1_r7 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_mix000_PSO_ALL/test.desc new file mode 100644 index 00000000000..51e443970d6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_PSO_OPC/mix000.c b/regression/goto-instrument-wmm-core/ppc_mix000_PSO_OPC/mix000.c new file mode 100644 index 00000000000..761c44e999e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_PSO_OPC/mix000.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&z + __unbuffered_p1_r4) = __unbuffered_p1_r5; + __unbuffered_p1_r7 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_mix000_PSO_OPC/test.desc new file mode 100644 index 00000000000..4b6b70971c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_PSO_OPT/mix000.c b/regression/goto-instrument-wmm-core/ppc_mix000_PSO_OPT/mix000.c new file mode 100644 index 00000000000..761c44e999e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_PSO_OPT/mix000.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&z + __unbuffered_p1_r4) = __unbuffered_p1_r5; + __unbuffered_p1_r7 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_mix000_PSO_OPT/test.desc new file mode 100644 index 00000000000..1dac8ef6eeb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix000.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_RMO_ALL/mix000.c b/regression/goto-instrument-wmm-core/ppc_mix000_RMO_ALL/mix000.c new file mode 100644 index 00000000000..761c44e999e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_RMO_ALL/mix000.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&z + __unbuffered_p1_r4) = __unbuffered_p1_r5; + __unbuffered_p1_r7 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_mix000_RMO_ALL/test.desc new file mode 100644 index 00000000000..0e9afb1d812 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_RMO_OPC/mix000.c b/regression/goto-instrument-wmm-core/ppc_mix000_RMO_OPC/mix000.c new file mode 100644 index 00000000000..761c44e999e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_RMO_OPC/mix000.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&z + __unbuffered_p1_r4) = __unbuffered_p1_r5; + __unbuffered_p1_r7 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_mix000_RMO_OPC/test.desc new file mode 100644 index 00000000000..008c387bd6c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix000.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_RMO_OPT/mix000.c b/regression/goto-instrument-wmm-core/ppc_mix000_RMO_OPT/mix000.c new file mode 100644 index 00000000000..761c44e999e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_RMO_OPT/mix000.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&z + __unbuffered_p1_r4) = __unbuffered_p1_r5; + __unbuffered_p1_r7 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_mix000_RMO_OPT/test.desc new file mode 100644 index 00000000000..b04a9dc6843 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix000.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_SC_SAFE/mix000.c b/regression/goto-instrument-wmm-core/ppc_mix000_SC_SAFE/mix000.c new file mode 100644 index 00000000000..761c44e999e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_SC_SAFE/mix000.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&z + __unbuffered_p1_r4) = __unbuffered_p1_r5; + __unbuffered_p1_r7 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_mix000_SC_SAFE/test.desc new file mode 100644 index 00000000000..83fafb043c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_TSO_ALL/mix000.c b/regression/goto-instrument-wmm-core/ppc_mix000_TSO_ALL/mix000.c new file mode 100644 index 00000000000..761c44e999e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_TSO_ALL/mix000.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&z + __unbuffered_p1_r4) = __unbuffered_p1_r5; + __unbuffered_p1_r7 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_mix000_TSO_ALL/test.desc new file mode 100644 index 00000000000..bd964cf1794 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_TSO_OPC/mix000.c b/regression/goto-instrument-wmm-core/ppc_mix000_TSO_OPC/mix000.c new file mode 100644 index 00000000000..761c44e999e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_TSO_OPC/mix000.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&z + __unbuffered_p1_r4) = __unbuffered_p1_r5; + __unbuffered_p1_r7 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_mix000_TSO_OPC/test.desc new file mode 100644 index 00000000000..6b44e943465 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_TSO_OPT/mix000.c b/regression/goto-instrument-wmm-core/ppc_mix000_TSO_OPT/mix000.c new file mode 100644 index 00000000000..761c44e999e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_TSO_OPT/mix000.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&z + __unbuffered_p1_r4) = __unbuffered_p1_r5; + __unbuffered_p1_r7 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_mix000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_mix000_TSO_OPT/test.desc new file mode 100644 index 00000000000..8bf6217d80c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_mix000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix000.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_CAV11_SAFE/podrr000.c b/regression/goto-instrument-wmm-core/ppc_podrr000_CAV11_SAFE/podrr000.c new file mode 100644 index 00000000000..1bf667bab67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_CAV11_SAFE/podrr000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr000_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..74e27d3858d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr000.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_ALL/podrr000.c b/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_ALL/podrr000.c new file mode 100644 index 00000000000..1bf667bab67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_ALL/podrr000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_ALL/test.desc new file mode 100644 index 00000000000..7353a68174e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_OPC/podrr000.c b/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_OPC/podrr000.c new file mode 100644 index 00000000000..1bf667bab67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_OPC/podrr000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_OPC/test.desc new file mode 100644 index 00000000000..cff7dc4614e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_OPT/podrr000.c b/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_OPT/podrr000.c new file mode 100644 index 00000000000..1bf667bab67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_OPT/podrr000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_OPT/test.desc new file mode 100644 index 00000000000..8e6c7b17adc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrr000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_ALL/podrr000.c b/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_ALL/podrr000.c new file mode 100644 index 00000000000..1bf667bab67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_ALL/podrr000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_ALL/test.desc new file mode 100644 index 00000000000..0023dd79695 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +podrr000.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_OPC/podrr000.c b/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_OPC/podrr000.c new file mode 100644 index 00000000000..1bf667bab67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_OPC/podrr000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_OPC/test.desc new file mode 100644 index 00000000000..1079d8d16a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +podrr000.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_OPT/podrr000.c b/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_OPT/podrr000.c new file mode 100644 index 00000000000..1bf667bab67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_OPT/podrr000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_OPT/test.desc new file mode 100644 index 00000000000..ddd25050ddb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrr000.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_ALL/podrr000.c b/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_ALL/podrr000.c new file mode 100644 index 00000000000..1bf667bab67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_ALL/podrr000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_ALL/test.desc new file mode 100644 index 00000000000..8f90c33fb6d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr000.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_OPC/podrr000.c b/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_OPC/podrr000.c new file mode 100644 index 00000000000..1bf667bab67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_OPC/podrr000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_OPC/test.desc new file mode 100644 index 00000000000..515ab227a01 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr000.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_OPT/podrr000.c b/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_OPT/podrr000.c new file mode 100644 index 00000000000..1bf667bab67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_OPT/podrr000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_OPT/test.desc new file mode 100644 index 00000000000..cf373c00838 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrr000.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_SC_SAFE/podrr000.c b/regression/goto-instrument-wmm-core/ppc_podrr000_SC_SAFE/podrr000.c new file mode 100644 index 00000000000..1bf667bab67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_SC_SAFE/podrr000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr000_SC_SAFE/test.desc new file mode 100644 index 00000000000..776ae15a7c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_ALL/podrr000.c b/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_ALL/podrr000.c new file mode 100644 index 00000000000..1bf667bab67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_ALL/podrr000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_ALL/test.desc new file mode 100644 index 00000000000..573578ebf79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +podrr000.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_OPC/podrr000.c b/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_OPC/podrr000.c new file mode 100644 index 00000000000..1bf667bab67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_OPC/podrr000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_OPC/test.desc new file mode 100644 index 00000000000..3c5387c31ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +podrr000.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_OPT/podrr000.c b/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_OPT/podrr000.c new file mode 100644 index 00000000000..1bf667bab67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_OPT/podrr000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_OPT/test.desc new file mode 100644 index 00000000000..df2f0b6f116 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrr000.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_CAV11_SAFE/podrr001.c b/regression/goto-instrument-wmm-core/ppc_podrr001_CAV11_SAFE/podrr001.c new file mode 100644 index 00000000000..6a52bc51973 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_CAV11_SAFE/podrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr001_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..bf57004274f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr001.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_POWER_ALL/podrr001.c b/regression/goto-instrument-wmm-core/ppc_podrr001_POWER_ALL/podrr001.c new file mode 100644 index 00000000000..6a52bc51973 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_POWER_ALL/podrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr001_POWER_ALL/test.desc new file mode 100644 index 00000000000..8ac6348d740 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_POWER_OPC/podrr001.c b/regression/goto-instrument-wmm-core/ppc_podrr001_POWER_OPC/podrr001.c new file mode 100644 index 00000000000..6a52bc51973 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_POWER_OPC/podrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr001_POWER_OPC/test.desc new file mode 100644 index 00000000000..65ca2952745 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr001_POWER_OPT/test.desc index 65b9e6816f6..de3cf844ee1 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrr001_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk podrr001.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_ALL/podrr001.c b/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_ALL/podrr001.c new file mode 100644 index 00000000000..6a52bc51973 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_ALL/podrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_ALL/test.desc new file mode 100644 index 00000000000..5022b305181 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr001.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_OPC/podrr001.c b/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_OPC/podrr001.c new file mode 100644 index 00000000000..6a52bc51973 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_OPC/podrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_OPC/test.desc new file mode 100644 index 00000000000..ab5aaa5f8c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr001.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_OPT/podrr001.c b/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_OPT/podrr001.c new file mode 100644 index 00000000000..6a52bc51973 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_OPT/podrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_OPT/test.desc new file mode 100644 index 00000000000..f5112560405 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrr001.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_ALL/podrr001.c b/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_ALL/podrr001.c new file mode 100644 index 00000000000..6a52bc51973 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_ALL/podrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_ALL/test.desc new file mode 100644 index 00000000000..6002d0ead94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr001.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_OPC/podrr001.c b/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_OPC/podrr001.c new file mode 100644 index 00000000000..6a52bc51973 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_OPC/podrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_OPC/test.desc new file mode 100644 index 00000000000..05bc396c549 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr001.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_OPT/podrr001.c b/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_OPT/podrr001.c new file mode 100644 index 00000000000..6a52bc51973 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_OPT/podrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_OPT/test.desc new file mode 100644 index 00000000000..9093aed1372 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrr001.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_SC_SAFE/podrr001.c b/regression/goto-instrument-wmm-core/ppc_podrr001_SC_SAFE/podrr001.c new file mode 100644 index 00000000000..6a52bc51973 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_SC_SAFE/podrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr001_SC_SAFE/test.desc new file mode 100644 index 00000000000..d4f71963221 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_ALL/podrr001.c b/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_ALL/podrr001.c new file mode 100644 index 00000000000..6a52bc51973 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_ALL/podrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_ALL/test.desc new file mode 100644 index 00000000000..83ca532438a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr001.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_OPC/podrr001.c b/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_OPC/podrr001.c new file mode 100644 index 00000000000..6a52bc51973 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_OPC/podrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_OPC/test.desc new file mode 100644 index 00000000000..b2f3e6cd0ca --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr001.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_OPT/podrr001.c b/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_OPT/podrr001.c new file mode 100644 index 00000000000..6a52bc51973 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_OPT/podrr001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_OPT/test.desc new file mode 100644 index 00000000000..8d642e020f2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrr001.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_CAV11_SAFE/podrr002.c b/regression/goto-instrument-wmm-core/ppc_podrr002_CAV11_SAFE/podrr002.c new file mode 100644 index 00000000000..d8a3de11e7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_CAV11_SAFE/podrr002.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr002_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..8026f21fe48 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr002.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_ALL/podrr002.c b/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_ALL/podrr002.c new file mode 100644 index 00000000000..d8a3de11e7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_ALL/podrr002.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_ALL/test.desc new file mode 100644 index 00000000000..bc370c53dbe --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +podrr002.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_OPC/podrr002.c b/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_OPC/podrr002.c new file mode 100644 index 00000000000..d8a3de11e7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_OPC/podrr002.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_OPC/test.desc new file mode 100644 index 00000000000..d2de3e27019 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr002.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_OPT/podrr002.c b/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_OPT/podrr002.c new file mode 100644 index 00000000000..d8a3de11e7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_OPT/podrr002.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_OPT/test.desc new file mode 100644 index 00000000000..55cc4076498 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrr002.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_ALL/podrr002.c b/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_ALL/podrr002.c new file mode 100644 index 00000000000..d8a3de11e7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_ALL/podrr002.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_ALL/test.desc new file mode 100644 index 00000000000..03a1cb2a945 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +podrr002.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_OPC/podrr002.c b/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_OPC/podrr002.c new file mode 100644 index 00000000000..d8a3de11e7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_OPC/podrr002.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_OPC/test.desc new file mode 100644 index 00000000000..6722b5f92e1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +podrr002.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_OPT/podrr002.c b/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_OPT/podrr002.c new file mode 100644 index 00000000000..d8a3de11e7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_OPT/podrr002.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_OPT/test.desc new file mode 100644 index 00000000000..09517bac7a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrr002.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_ALL/podrr002.c b/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_ALL/podrr002.c new file mode 100644 index 00000000000..d8a3de11e7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_ALL/podrr002.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_ALL/test.desc new file mode 100644 index 00000000000..e85073fd497 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr002.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_OPC/podrr002.c b/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_OPC/podrr002.c new file mode 100644 index 00000000000..d8a3de11e7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_OPC/podrr002.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_OPC/test.desc new file mode 100644 index 00000000000..7554e8b0d88 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr002.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_OPT/podrr002.c b/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_OPT/podrr002.c new file mode 100644 index 00000000000..d8a3de11e7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_OPT/podrr002.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_OPT/test.desc new file mode 100644 index 00000000000..03170b7a207 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrr002.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_SC_SAFE/podrr002.c b/regression/goto-instrument-wmm-core/ppc_podrr002_SC_SAFE/podrr002.c new file mode 100644 index 00000000000..d8a3de11e7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_SC_SAFE/podrr002.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr002_SC_SAFE/test.desc new file mode 100644 index 00000000000..fd145429b60 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr002.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_ALL/podrr002.c b/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_ALL/podrr002.c new file mode 100644 index 00000000000..d8a3de11e7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_ALL/podrr002.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_ALL/test.desc new file mode 100644 index 00000000000..e358a1948a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +podrr002.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_OPC/podrr002.c b/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_OPC/podrr002.c new file mode 100644 index 00000000000..d8a3de11e7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_OPC/podrr002.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_OPC/test.desc new file mode 100644 index 00000000000..c13deca6c56 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +podrr002.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_OPT/podrr002.c b/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_OPT/podrr002.c new file mode 100644 index 00000000000..d8a3de11e7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_OPT/podrr002.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_OPT/test.desc new file mode 100644 index 00000000000..d8fe0b9ea73 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr002_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrr002.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_CAV11_ERROR/podrr003.c b/regression/goto-instrument-wmm-core/ppc_podrr003_CAV11_ERROR/podrr003.c new file mode 100644 index 00000000000..28d9bbfdecc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_CAV11_ERROR/podrr003.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr003_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..f6300cfcc90 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr003.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_ALL/podrr003.c b/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_ALL/podrr003.c new file mode 100644 index 00000000000..28d9bbfdecc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_ALL/podrr003.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_ALL/test.desc new file mode 100644 index 00000000000..c0ac57db9b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr003.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_OPC/podrr003.c b/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_OPC/podrr003.c new file mode 100644 index 00000000000..28d9bbfdecc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_OPC/podrr003.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_OPC/test.desc new file mode 100644 index 00000000000..2bdeeacbd77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr003.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_OPT/podrr003.c b/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_OPT/podrr003.c new file mode 100644 index 00000000000..28d9bbfdecc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_OPT/podrr003.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_OPT/test.desc new file mode 100644 index 00000000000..f75acb82c88 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrr003.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_ALL/podrr003.c b/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_ALL/podrr003.c new file mode 100644 index 00000000000..28d9bbfdecc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_ALL/podrr003.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_ALL/test.desc new file mode 100644 index 00000000000..a83d24cc34e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr003.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_OPC/podrr003.c b/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_OPC/podrr003.c new file mode 100644 index 00000000000..28d9bbfdecc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_OPC/podrr003.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_OPC/test.desc new file mode 100644 index 00000000000..ea8b5d65c14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr003.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_OPT/podrr003.c b/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_OPT/podrr003.c new file mode 100644 index 00000000000..28d9bbfdecc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_OPT/podrr003.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_OPT/test.desc new file mode 100644 index 00000000000..0f072b99006 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrr003.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_ALL/podrr003.c b/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_ALL/podrr003.c new file mode 100644 index 00000000000..28d9bbfdecc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_ALL/podrr003.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_ALL/test.desc new file mode 100644 index 00000000000..0ab6beee4cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr003.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_OPC/podrr003.c b/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_OPC/podrr003.c new file mode 100644 index 00000000000..28d9bbfdecc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_OPC/podrr003.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_OPC/test.desc new file mode 100644 index 00000000000..e1646eda22b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr003.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_OPT/podrr003.c b/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_OPT/podrr003.c new file mode 100644 index 00000000000..28d9bbfdecc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_OPT/podrr003.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_OPT/test.desc new file mode 100644 index 00000000000..7ba08b37ad3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrr003.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_SC_SAFE/podrr003.c b/regression/goto-instrument-wmm-core/ppc_podrr003_SC_SAFE/podrr003.c new file mode 100644 index 00000000000..28d9bbfdecc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_SC_SAFE/podrr003.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr003_SC_SAFE/test.desc new file mode 100644 index 00000000000..af57c416a5d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr003.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_ALL/podrr003.c b/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_ALL/podrr003.c new file mode 100644 index 00000000000..28d9bbfdecc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_ALL/podrr003.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_ALL/test.desc new file mode 100644 index 00000000000..b480b7998a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr003.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_OPC/podrr003.c b/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_OPC/podrr003.c new file mode 100644 index 00000000000..28d9bbfdecc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_OPC/podrr003.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_OPC/test.desc new file mode 100644 index 00000000000..aa417acb737 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrr003.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_OPT/podrr003.c b/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_OPT/podrr003.c new file mode 100644 index 00000000000..28d9bbfdecc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_OPT/podrr003.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_OPT/test.desc new file mode 100644 index 00000000000..5aa0085b6cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrr003_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrr003.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_CAV11_ERROR/podrw000.c b/regression/goto-instrument-wmm-core/ppc_podrw000_CAV11_ERROR/podrw000.c new file mode 100644 index 00000000000..7d808e02bb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_CAV11_ERROR/podrw000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..17a5bc43da5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrw000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_ALL/podrw000.c b/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_ALL/podrw000.c new file mode 100644 index 00000000000..7d808e02bb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_ALL/podrw000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_ALL/test.desc new file mode 100644 index 00000000000..495ad8c4a55 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrw000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_OPC/podrw000.c b/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_OPC/podrw000.c new file mode 100644 index 00000000000..7d808e02bb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_OPC/podrw000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_OPC/test.desc new file mode 100644 index 00000000000..f8b63904f51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrw000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_OPT/podrw000.c b/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_OPT/podrw000.c new file mode 100644 index 00000000000..7d808e02bb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_OPT/podrw000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_OPT/test.desc new file mode 100644 index 00000000000..139405660eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrw000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_ALL/podrw000.c b/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_ALL/podrw000.c new file mode 100644 index 00000000000..7d808e02bb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_ALL/podrw000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_ALL/test.desc new file mode 100644 index 00000000000..778034e86cc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +podrw000.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_OPC/podrw000.c b/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_OPC/podrw000.c new file mode 100644 index 00000000000..7d808e02bb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_OPC/podrw000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_OPC/test.desc new file mode 100644 index 00000000000..bb9724061d1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +podrw000.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_OPT/podrw000.c b/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_OPT/podrw000.c new file mode 100644 index 00000000000..7d808e02bb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_OPT/podrw000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_OPT/test.desc new file mode 100644 index 00000000000..b07f2dbc4b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrw000.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_ALL/podrw000.c b/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_ALL/podrw000.c new file mode 100644 index 00000000000..7d808e02bb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_ALL/podrw000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_ALL/test.desc new file mode 100644 index 00000000000..55afae73cf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrw000.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_OPC/podrw000.c b/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_OPC/podrw000.c new file mode 100644 index 00000000000..7d808e02bb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_OPC/podrw000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_OPC/test.desc new file mode 100644 index 00000000000..d3dbbdadc40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrw000.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_OPT/podrw000.c b/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_OPT/podrw000.c new file mode 100644 index 00000000000..7d808e02bb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_OPT/podrw000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_OPT/test.desc new file mode 100644 index 00000000000..c65e3a8a4a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrw000.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_SC_SAFE/podrw000.c b/regression/goto-instrument-wmm-core/ppc_podrw000_SC_SAFE/podrw000.c new file mode 100644 index 00000000000..7d808e02bb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_SC_SAFE/podrw000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw000_SC_SAFE/test.desc new file mode 100644 index 00000000000..ac2370a13eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrw000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_ALL/podrw000.c b/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_ALL/podrw000.c new file mode 100644 index 00000000000..7d808e02bb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_ALL/podrw000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_ALL/test.desc new file mode 100644 index 00000000000..60b48c01d69 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +podrw000.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_OPC/podrw000.c b/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_OPC/podrw000.c new file mode 100644 index 00000000000..7d808e02bb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_OPC/podrw000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_OPC/test.desc new file mode 100644 index 00000000000..e99a68521bf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +podrw000.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_OPT/podrw000.c b/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_OPT/podrw000.c new file mode 100644 index 00000000000..7d808e02bb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_OPT/podrw000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_OPT/test.desc new file mode 100644 index 00000000000..8c97a212ffb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrw000.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_CAV11_ERROR/podrw001.c b/regression/goto-instrument-wmm-core/ppc_podrw001_CAV11_ERROR/podrw001.c new file mode 100644 index 00000000000..54faa50728f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_CAV11_ERROR/podrw001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw001_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..10f8bf55797 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrw001.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_POWER_ALL/podrw001.c b/regression/goto-instrument-wmm-core/ppc_podrw001_POWER_ALL/podrw001.c new file mode 100644 index 00000000000..54faa50728f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_POWER_ALL/podrw001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw001_POWER_ALL/test.desc new file mode 100644 index 00000000000..758e18a5f70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrw001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_POWER_OPC/podrw001.c b/regression/goto-instrument-wmm-core/ppc_podrw001_POWER_OPC/podrw001.c new file mode 100644 index 00000000000..54faa50728f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_POWER_OPC/podrw001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw001_POWER_OPC/test.desc new file mode 100644 index 00000000000..17cf076fd3b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrw001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw001_POWER_OPT/test.desc index d05029a140e..133038b5564 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrw001_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk podrw001.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_ALL/podrw001.c b/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_ALL/podrw001.c new file mode 100644 index 00000000000..54faa50728f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_ALL/podrw001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_ALL/test.desc new file mode 100644 index 00000000000..074c684157c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrw001.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_OPC/podrw001.c b/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_OPC/podrw001.c new file mode 100644 index 00000000000..54faa50728f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_OPC/podrw001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_OPC/test.desc new file mode 100644 index 00000000000..40cab4c1188 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrw001.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_OPT/podrw001.c b/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_OPT/podrw001.c new file mode 100644 index 00000000000..54faa50728f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_OPT/podrw001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_OPT/test.desc new file mode 100644 index 00000000000..117de09256e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrw001.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_ALL/podrw001.c b/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_ALL/podrw001.c new file mode 100644 index 00000000000..54faa50728f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_ALL/podrw001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_ALL/test.desc new file mode 100644 index 00000000000..088f1a760a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrw001.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_OPC/podrw001.c b/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_OPC/podrw001.c new file mode 100644 index 00000000000..54faa50728f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_OPC/podrw001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_OPC/test.desc new file mode 100644 index 00000000000..abc71d4fb98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrw001.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_OPT/podrw001.c b/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_OPT/podrw001.c new file mode 100644 index 00000000000..54faa50728f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_OPT/podrw001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_OPT/test.desc new file mode 100644 index 00000000000..1506cda0fb8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrw001.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_SC_SAFE/podrw001.c b/regression/goto-instrument-wmm-core/ppc_podrw001_SC_SAFE/podrw001.c new file mode 100644 index 00000000000..54faa50728f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_SC_SAFE/podrw001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw001_SC_SAFE/test.desc new file mode 100644 index 00000000000..d7d1109302e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrw001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_ALL/podrw001.c b/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_ALL/podrw001.c new file mode 100644 index 00000000000..54faa50728f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_ALL/podrw001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_ALL/test.desc new file mode 100644 index 00000000000..e3d1ab2472a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrw001.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_OPC/podrw001.c b/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_OPC/podrw001.c new file mode 100644 index 00000000000..54faa50728f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_OPC/podrw001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_OPC/test.desc new file mode 100644 index 00000000000..cb1be1883a2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrw001.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_OPT/podrw001.c b/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_OPT/podrw001.c new file mode 100644 index 00000000000..54faa50728f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_OPT/podrw001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_OPT/test.desc new file mode 100644 index 00000000000..5cad2d108cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrw001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrw001.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_CAV11_ERROR/podrwposwr000.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_CAV11_ERROR/podrwposwr000.c new file mode 100644 index 00000000000..0ca7bda0643 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_CAV11_ERROR/podrwposwr000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = 1; + z = __unbuffered_p1_r6; + __unbuffered_p1_r8 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..46056a3ef15 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_ALL/podrwposwr000.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_ALL/podrwposwr000.c new file mode 100644 index 00000000000..0ca7bda0643 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_ALL/podrwposwr000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = 1; + z = __unbuffered_p1_r6; + __unbuffered_p1_r8 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_ALL/test.desc new file mode 100644 index 00000000000..707186e20c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_OPC/podrwposwr000.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_OPC/podrwposwr000.c new file mode 100644 index 00000000000..0ca7bda0643 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_OPC/podrwposwr000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = 1; + z = __unbuffered_p1_r6; + __unbuffered_p1_r8 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_OPC/test.desc new file mode 100644 index 00000000000..d34d38b9b12 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_OPT/podrwposwr000.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_OPT/podrwposwr000.c new file mode 100644 index 00000000000..0ca7bda0643 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_OPT/podrwposwr000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = 1; + z = __unbuffered_p1_r6; + __unbuffered_p1_r8 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_OPT/test.desc new file mode 100644 index 00000000000..7d9e2950529 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_ALL/podrwposwr000.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_ALL/podrwposwr000.c new file mode 100644 index 00000000000..0ca7bda0643 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_ALL/podrwposwr000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = 1; + z = __unbuffered_p1_r6; + __unbuffered_p1_r8 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_ALL/test.desc new file mode 100644 index 00000000000..c4058c628b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr000.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_OPC/podrwposwr000.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_OPC/podrwposwr000.c new file mode 100644 index 00000000000..0ca7bda0643 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_OPC/podrwposwr000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = 1; + z = __unbuffered_p1_r6; + __unbuffered_p1_r8 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_OPC/test.desc new file mode 100644 index 00000000000..558d3d90df8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr000.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_OPT/podrwposwr000.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_OPT/podrwposwr000.c new file mode 100644 index 00000000000..0ca7bda0643 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_OPT/podrwposwr000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = 1; + z = __unbuffered_p1_r6; + __unbuffered_p1_r8 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_OPT/test.desc new file mode 100644 index 00000000000..f1d7066a37f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr000.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_ALL/podrwposwr000.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_ALL/podrwposwr000.c new file mode 100644 index 00000000000..0ca7bda0643 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_ALL/podrwposwr000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = 1; + z = __unbuffered_p1_r6; + __unbuffered_p1_r8 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_ALL/test.desc new file mode 100644 index 00000000000..b8a0427f62c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr000.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_OPC/podrwposwr000.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_OPC/podrwposwr000.c new file mode 100644 index 00000000000..0ca7bda0643 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_OPC/podrwposwr000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = 1; + z = __unbuffered_p1_r6; + __unbuffered_p1_r8 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_OPC/test.desc new file mode 100644 index 00000000000..7c03a62c3ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr000.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_OPT/podrwposwr000.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_OPT/podrwposwr000.c new file mode 100644 index 00000000000..0ca7bda0643 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_OPT/podrwposwr000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = 1; + z = __unbuffered_p1_r6; + __unbuffered_p1_r8 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_OPT/test.desc new file mode 100644 index 00000000000..6a9d8366d53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr000.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_SC_SAFE/podrwposwr000.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_SC_SAFE/podrwposwr000.c new file mode 100644 index 00000000000..0ca7bda0643 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_SC_SAFE/podrwposwr000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = 1; + z = __unbuffered_p1_r6; + __unbuffered_p1_r8 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_SC_SAFE/test.desc new file mode 100644 index 00000000000..2ef90c689a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_ALL/podrwposwr000.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_ALL/podrwposwr000.c new file mode 100644 index 00000000000..0ca7bda0643 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_ALL/podrwposwr000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = 1; + z = __unbuffered_p1_r6; + __unbuffered_p1_r8 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_ALL/test.desc new file mode 100644 index 00000000000..ff24ef574ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr000.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_OPC/podrwposwr000.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_OPC/podrwposwr000.c new file mode 100644 index 00000000000..0ca7bda0643 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_OPC/podrwposwr000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = 1; + z = __unbuffered_p1_r6; + __unbuffered_p1_r8 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_OPC/test.desc new file mode 100644 index 00000000000..e2972a4de26 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr000.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_OPT/podrwposwr000.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_OPT/podrwposwr000.c new file mode 100644 index 00000000000..0ca7bda0643 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_OPT/podrwposwr000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = 1; + z = __unbuffered_p1_r6; + __unbuffered_p1_r8 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_OPT/test.desc new file mode 100644 index 00000000000..2707cc6df1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr000.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_CAV11_ERROR/podrwposwr001.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_CAV11_ERROR/podrwposwr001.c new file mode 100644 index 00000000000..c9a23e8ee53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_CAV11_ERROR/podrwposwr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..ac6df164bc8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr001.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_POWER_ALL/podrwposwr001.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_POWER_ALL/podrwposwr001.c new file mode 100644 index 00000000000..c9a23e8ee53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_POWER_ALL/podrwposwr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_POWER_ALL/test.desc new file mode 100644 index 00000000000..b81fda69127 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +podrwposwr001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_POWER_OPC/podrwposwr001.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_POWER_OPC/podrwposwr001.c new file mode 100644 index 00000000000..c9a23e8ee53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_POWER_OPC/podrwposwr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_POWER_OPC/test.desc new file mode 100644 index 00000000000..3d0eee8faa5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_POWER_OPT/test.desc index 26cad876007..4369cc59d54 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk podrwposwr001.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_ALL/podrwposwr001.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_ALL/podrwposwr001.c new file mode 100644 index 00000000000..c9a23e8ee53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_ALL/podrwposwr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_ALL/test.desc new file mode 100644 index 00000000000..069d86badcf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr001.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_OPC/podrwposwr001.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_OPC/podrwposwr001.c new file mode 100644 index 00000000000..c9a23e8ee53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_OPC/podrwposwr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_OPC/test.desc new file mode 100644 index 00000000000..df94336e437 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr001.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_OPT/podrwposwr001.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_OPT/podrwposwr001.c new file mode 100644 index 00000000000..c9a23e8ee53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_OPT/podrwposwr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_OPT/test.desc new file mode 100644 index 00000000000..b1bcc8fc691 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr001.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_ALL/podrwposwr001.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_ALL/podrwposwr001.c new file mode 100644 index 00000000000..c9a23e8ee53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_ALL/podrwposwr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_ALL/test.desc new file mode 100644 index 00000000000..7751b6fe405 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +podrwposwr001.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_OPC/podrwposwr001.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_OPC/podrwposwr001.c new file mode 100644 index 00000000000..c9a23e8ee53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_OPC/podrwposwr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_OPC/test.desc new file mode 100644 index 00000000000..bc5d6b7a694 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr001.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_OPT/podrwposwr001.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_OPT/podrwposwr001.c new file mode 100644 index 00000000000..c9a23e8ee53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_OPT/podrwposwr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_OPT/test.desc new file mode 100644 index 00000000000..288ce2c65c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr001.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_SC_SAFE/podrwposwr001.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_SC_SAFE/podrwposwr001.c new file mode 100644 index 00000000000..c9a23e8ee53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_SC_SAFE/podrwposwr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_SC_SAFE/test.desc new file mode 100644 index 00000000000..84375a1520e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_ALL/podrwposwr001.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_ALL/podrwposwr001.c new file mode 100644 index 00000000000..c9a23e8ee53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_ALL/podrwposwr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_ALL/test.desc new file mode 100644 index 00000000000..2892d464886 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr001.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_OPC/podrwposwr001.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_OPC/podrwposwr001.c new file mode 100644 index 00000000000..c9a23e8ee53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_OPC/podrwposwr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_OPC/test.desc new file mode 100644 index 00000000000..82c9dc06364 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr001.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_OPT/podrwposwr001.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_OPT/podrwposwr001.c new file mode 100644 index 00000000000..c9a23e8ee53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_OPT/podrwposwr001.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_OPT/test.desc new file mode 100644 index 00000000000..291eaec6e69 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr001.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_CAV11_ERROR/podrwposwr002.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_CAV11_ERROR/podrwposwr002.c new file mode 100644 index 00000000000..42d904da188 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_CAV11_ERROR/podrwposwr002.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..35a5da06133 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr002.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_POWER_ALL/podrwposwr002.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_POWER_ALL/podrwposwr002.c new file mode 100644 index 00000000000..42d904da188 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_POWER_ALL/podrwposwr002.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_POWER_ALL/test.desc new file mode 100644 index 00000000000..f56cc5d0e5c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +podrwposwr002.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_POWER_OPC/podrwposwr002.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_POWER_OPC/podrwposwr002.c new file mode 100644 index 00000000000..42d904da188 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_POWER_OPC/podrwposwr002.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_POWER_OPC/test.desc new file mode 100644 index 00000000000..159771df1dc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr002.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_POWER_OPT/test.desc index 4f9b8556b1a..7b890ebc1f0 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk podrwposwr002.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_ALL/podrwposwr002.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_ALL/podrwposwr002.c new file mode 100644 index 00000000000..42d904da188 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_ALL/podrwposwr002.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_ALL/test.desc new file mode 100644 index 00000000000..ac68fb0bc06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr002.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_OPC/podrwposwr002.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_OPC/podrwposwr002.c new file mode 100644 index 00000000000..42d904da188 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_OPC/podrwposwr002.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_OPC/test.desc new file mode 100644 index 00000000000..71ac87144aa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr002.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_OPT/podrwposwr002.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_OPT/podrwposwr002.c new file mode 100644 index 00000000000..42d904da188 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_OPT/podrwposwr002.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_OPT/test.desc new file mode 100644 index 00000000000..e36a1338f9d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr002.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_ALL/podrwposwr002.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_ALL/podrwposwr002.c new file mode 100644 index 00000000000..42d904da188 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_ALL/podrwposwr002.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_ALL/test.desc new file mode 100644 index 00000000000..8585038f365 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +podrwposwr002.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_OPC/podrwposwr002.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_OPC/podrwposwr002.c new file mode 100644 index 00000000000..42d904da188 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_OPC/podrwposwr002.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_OPC/test.desc new file mode 100644 index 00000000000..446cdd9c3ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr002.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_OPT/podrwposwr002.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_OPT/podrwposwr002.c new file mode 100644 index 00000000000..42d904da188 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_OPT/podrwposwr002.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_OPT/test.desc new file mode 100644 index 00000000000..be39e5a4330 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr002.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_SC_SAFE/podrwposwr002.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_SC_SAFE/podrwposwr002.c new file mode 100644 index 00000000000..42d904da188 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_SC_SAFE/podrwposwr002.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_SC_SAFE/test.desc new file mode 100644 index 00000000000..2c28467e506 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr002.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_ALL/podrwposwr002.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_ALL/podrwposwr002.c new file mode 100644 index 00000000000..42d904da188 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_ALL/podrwposwr002.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_ALL/test.desc new file mode 100644 index 00000000000..868c22f9d7b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr002.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_OPC/podrwposwr002.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_OPC/podrwposwr002.c new file mode 100644 index 00000000000..42d904da188 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_OPC/podrwposwr002.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_OPC/test.desc new file mode 100644 index 00000000000..51228b4562b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr002.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_OPT/podrwposwr002.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_OPT/podrwposwr002.c new file mode 100644 index 00000000000..42d904da188 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_OPT/podrwposwr002.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && x == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_OPT/test.desc new file mode 100644 index 00000000000..7fbafe01993 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr002_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr002.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_CAV11_ERROR/podrwposwr003.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_CAV11_ERROR/podrwposwr003.c new file mode 100644 index 00000000000..419c0236208 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_CAV11_ERROR/podrwposwr003.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..499f2cf40f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr003.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_POWER_ALL/podrwposwr003.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_POWER_ALL/podrwposwr003.c new file mode 100644 index 00000000000..419c0236208 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_POWER_ALL/podrwposwr003.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_POWER_ALL/test.desc new file mode 100644 index 00000000000..0558b747e87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +podrwposwr003.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_POWER_OPC/podrwposwr003.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_POWER_OPC/podrwposwr003.c new file mode 100644 index 00000000000..419c0236208 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_POWER_OPC/podrwposwr003.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_POWER_OPC/test.desc new file mode 100644 index 00000000000..9a546211cd5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr003.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_POWER_OPT/test.desc index 0f2238be125..7348801aa9d 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk podrwposwr003.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_ALL/podrwposwr003.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_ALL/podrwposwr003.c new file mode 100644 index 00000000000..419c0236208 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_ALL/podrwposwr003.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_ALL/test.desc new file mode 100644 index 00000000000..d0d3f6d80b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr003.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_OPC/podrwposwr003.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_OPC/podrwposwr003.c new file mode 100644 index 00000000000..419c0236208 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_OPC/podrwposwr003.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_OPC/test.desc new file mode 100644 index 00000000000..c4950609fb8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr003.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_OPT/podrwposwr003.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_OPT/podrwposwr003.c new file mode 100644 index 00000000000..419c0236208 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_OPT/podrwposwr003.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_OPT/test.desc new file mode 100644 index 00000000000..2c8e69a9b23 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr003.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_ALL/podrwposwr003.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_ALL/podrwposwr003.c new file mode 100644 index 00000000000..419c0236208 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_ALL/podrwposwr003.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_ALL/test.desc new file mode 100644 index 00000000000..eaf6deed575 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +podrwposwr003.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_OPC/podrwposwr003.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_OPC/podrwposwr003.c new file mode 100644 index 00000000000..419c0236208 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_OPC/podrwposwr003.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_OPC/test.desc new file mode 100644 index 00000000000..bbd2cfc090a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr003.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_OPT/podrwposwr003.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_OPT/podrwposwr003.c new file mode 100644 index 00000000000..419c0236208 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_OPT/podrwposwr003.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_OPT/test.desc new file mode 100644 index 00000000000..fd03754f2cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr003.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_SC_SAFE/podrwposwr003.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_SC_SAFE/podrwposwr003.c new file mode 100644 index 00000000000..419c0236208 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_SC_SAFE/podrwposwr003.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_SC_SAFE/test.desc new file mode 100644 index 00000000000..3fdebbc0da6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr003.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_ALL/podrwposwr003.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_ALL/podrwposwr003.c new file mode 100644 index 00000000000..419c0236208 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_ALL/podrwposwr003.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_ALL/test.desc new file mode 100644 index 00000000000..22deb0dec66 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr003.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_OPC/podrwposwr003.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_OPC/podrwposwr003.c new file mode 100644 index 00000000000..419c0236208 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_OPC/podrwposwr003.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_OPC/test.desc new file mode 100644 index 00000000000..adce6365f26 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr003.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_OPT/podrwposwr003.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_OPT/podrwposwr003.c new file mode 100644 index 00000000000..419c0236208 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_OPT/podrwposwr003.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + a = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + __unbuffered_p2_r6 = 1; + a = __unbuffered_p2_r6; + __unbuffered_p2_r8 = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(a == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r8 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_OPT/test.desc new file mode 100644 index 00000000000..aa09247aa8f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr003_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr003.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_CAV11_ERROR/podrwposwr004.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_CAV11_ERROR/podrwposwr004.c new file mode 100644 index 00000000000..196c2514aef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_CAV11_ERROR/podrwposwr004.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + __unbuffered_p1_r5 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..357d0d20f0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr004.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_ALL/podrwposwr004.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_ALL/podrwposwr004.c new file mode 100644 index 00000000000..196c2514aef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_ALL/podrwposwr004.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + __unbuffered_p1_r5 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_ALL/test.desc new file mode 100644 index 00000000000..cfbf3b34831 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr004.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_OPC/podrwposwr004.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_OPC/podrwposwr004.c new file mode 100644 index 00000000000..196c2514aef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_OPC/podrwposwr004.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + __unbuffered_p1_r5 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_OPC/test.desc new file mode 100644 index 00000000000..4290e95d89e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr004.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_OPT/podrwposwr004.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_OPT/podrwposwr004.c new file mode 100644 index 00000000000..196c2514aef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_OPT/podrwposwr004.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + __unbuffered_p1_r5 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_OPT/test.desc new file mode 100644 index 00000000000..f27fd782341 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr004.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_ALL/podrwposwr004.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_ALL/podrwposwr004.c new file mode 100644 index 00000000000..196c2514aef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_ALL/podrwposwr004.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + __unbuffered_p1_r5 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_ALL/test.desc new file mode 100644 index 00000000000..c835b19e148 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr004.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_OPC/podrwposwr004.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_OPC/podrwposwr004.c new file mode 100644 index 00000000000..196c2514aef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_OPC/podrwposwr004.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + __unbuffered_p1_r5 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_OPC/test.desc new file mode 100644 index 00000000000..69cafadc05e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr004.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_OPT/podrwposwr004.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_OPT/podrwposwr004.c new file mode 100644 index 00000000000..196c2514aef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_OPT/podrwposwr004.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + __unbuffered_p1_r5 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_OPT/test.desc new file mode 100644 index 00000000000..8ad7dd124a2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr004.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_ALL/podrwposwr004.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_ALL/podrwposwr004.c new file mode 100644 index 00000000000..196c2514aef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_ALL/podrwposwr004.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + __unbuffered_p1_r5 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_ALL/test.desc new file mode 100644 index 00000000000..9975ae3881c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr004.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_OPC/podrwposwr004.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_OPC/podrwposwr004.c new file mode 100644 index 00000000000..196c2514aef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_OPC/podrwposwr004.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + __unbuffered_p1_r5 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_OPC/test.desc new file mode 100644 index 00000000000..774c62497f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr004.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_OPT/podrwposwr004.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_OPT/podrwposwr004.c new file mode 100644 index 00000000000..196c2514aef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_OPT/podrwposwr004.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + __unbuffered_p1_r5 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_OPT/test.desc new file mode 100644 index 00000000000..37d9e3d6d53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr004.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_SC_SAFE/podrwposwr004.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_SC_SAFE/podrwposwr004.c new file mode 100644 index 00000000000..196c2514aef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_SC_SAFE/podrwposwr004.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + __unbuffered_p1_r5 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_SC_SAFE/test.desc new file mode 100644 index 00000000000..6b397ab6902 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr004.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_ALL/podrwposwr004.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_ALL/podrwposwr004.c new file mode 100644 index 00000000000..196c2514aef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_ALL/podrwposwr004.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + __unbuffered_p1_r5 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_ALL/test.desc new file mode 100644 index 00000000000..4b989518f10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr004.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_OPC/podrwposwr004.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_OPC/podrwposwr004.c new file mode 100644 index 00000000000..196c2514aef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_OPC/podrwposwr004.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + __unbuffered_p1_r5 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_OPC/test.desc new file mode 100644 index 00000000000..aa4a73c218a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr004.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_OPT/podrwposwr004.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_OPT/podrwposwr004.c new file mode 100644 index 00000000000..196c2514aef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_OPT/podrwposwr004.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + __unbuffered_p1_r5 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_OPT/test.desc new file mode 100644 index 00000000000..f36b8620bc9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr004_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr004.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_CAV11_SAFE/podrwposwr005.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_CAV11_SAFE/podrwposwr005.c new file mode 100644 index 00000000000..6a9cdaa3cac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_CAV11_SAFE/podrwposwr005.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = *(&x + __unbuffered_p1_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..90d3a55e49e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr005.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_ALL/podrwposwr005.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_ALL/podrwposwr005.c new file mode 100644 index 00000000000..6a9cdaa3cac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_ALL/podrwposwr005.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = *(&x + __unbuffered_p1_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_ALL/test.desc new file mode 100644 index 00000000000..866e186e4b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr005.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_OPC/podrwposwr005.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_OPC/podrwposwr005.c new file mode 100644 index 00000000000..6a9cdaa3cac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_OPC/podrwposwr005.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = *(&x + __unbuffered_p1_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_OPC/test.desc new file mode 100644 index 00000000000..8b94d0bccc5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr005.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_OPT/podrwposwr005.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_OPT/podrwposwr005.c new file mode 100644 index 00000000000..6a9cdaa3cac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_OPT/podrwposwr005.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = *(&x + __unbuffered_p1_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_OPT/test.desc new file mode 100644 index 00000000000..1c89efcb79c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr005.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_ALL/podrwposwr005.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_ALL/podrwposwr005.c new file mode 100644 index 00000000000..6a9cdaa3cac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_ALL/podrwposwr005.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = *(&x + __unbuffered_p1_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_ALL/test.desc new file mode 100644 index 00000000000..19624dc743c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr005.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_OPC/podrwposwr005.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_OPC/podrwposwr005.c new file mode 100644 index 00000000000..6a9cdaa3cac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_OPC/podrwposwr005.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = *(&x + __unbuffered_p1_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_OPC/test.desc new file mode 100644 index 00000000000..db949933bc5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr005.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_OPT/podrwposwr005.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_OPT/podrwposwr005.c new file mode 100644 index 00000000000..6a9cdaa3cac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_OPT/podrwposwr005.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = *(&x + __unbuffered_p1_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_OPT/test.desc new file mode 100644 index 00000000000..2e97822188a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr005.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_ALL/podrwposwr005.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_ALL/podrwposwr005.c new file mode 100644 index 00000000000..6a9cdaa3cac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_ALL/podrwposwr005.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = *(&x + __unbuffered_p1_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_ALL/test.desc new file mode 100644 index 00000000000..e2c5f661a0f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr005.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_OPC/podrwposwr005.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_OPC/podrwposwr005.c new file mode 100644 index 00000000000..6a9cdaa3cac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_OPC/podrwposwr005.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = *(&x + __unbuffered_p1_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_OPC/test.desc new file mode 100644 index 00000000000..e30e1317fb4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr005.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_OPT/podrwposwr005.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_OPT/podrwposwr005.c new file mode 100644 index 00000000000..6a9cdaa3cac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_OPT/podrwposwr005.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = *(&x + __unbuffered_p1_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_OPT/test.desc new file mode 100644 index 00000000000..9ca823af3dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr005.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_SC_SAFE/podrwposwr005.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_SC_SAFE/podrwposwr005.c new file mode 100644 index 00000000000..6a9cdaa3cac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_SC_SAFE/podrwposwr005.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = *(&x + __unbuffered_p1_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_SC_SAFE/test.desc new file mode 100644 index 00000000000..68833cf7397 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr005.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_ALL/podrwposwr005.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_ALL/podrwposwr005.c new file mode 100644 index 00000000000..6a9cdaa3cac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_ALL/podrwposwr005.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = *(&x + __unbuffered_p1_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_ALL/test.desc new file mode 100644 index 00000000000..62bf9f2ad48 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr005.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_OPC/podrwposwr005.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_OPC/podrwposwr005.c new file mode 100644 index 00000000000..6a9cdaa3cac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_OPC/podrwposwr005.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = *(&x + __unbuffered_p1_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_OPC/test.desc new file mode 100644 index 00000000000..e12e09d5a16 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr005.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_OPT/podrwposwr005.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_OPT/podrwposwr005.c new file mode 100644 index 00000000000..6a9cdaa3cac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_OPT/podrwposwr005.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = *(&x + __unbuffered_p1_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_OPT/test.desc new file mode 100644 index 00000000000..a02df40b368 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr005_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr005.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_CAV11_ERROR/podrwposwr006.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_CAV11_ERROR/podrwposwr006.c new file mode 100644 index 00000000000..8de979609b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_CAV11_ERROR/podrwposwr006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..493c0cd3a2e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr006.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_POWER_ALL/podrwposwr006.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_POWER_ALL/podrwposwr006.c new file mode 100644 index 00000000000..8de979609b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_POWER_ALL/podrwposwr006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_POWER_ALL/test.desc new file mode 100644 index 00000000000..d2588c9f03e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +podrwposwr006.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_POWER_OPC/podrwposwr006.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_POWER_OPC/podrwposwr006.c new file mode 100644 index 00000000000..8de979609b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_POWER_OPC/podrwposwr006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_POWER_OPC/test.desc new file mode 100644 index 00000000000..f797e16df14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr006.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_POWER_OPT/test.desc index 92d15961418..6a05151f995 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk podrwposwr006.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_ALL/podrwposwr006.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_ALL/podrwposwr006.c new file mode 100644 index 00000000000..8de979609b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_ALL/podrwposwr006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_ALL/test.desc new file mode 100644 index 00000000000..90d141dd194 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr006.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_OPC/podrwposwr006.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_OPC/podrwposwr006.c new file mode 100644 index 00000000000..8de979609b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_OPC/podrwposwr006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_OPC/test.desc new file mode 100644 index 00000000000..8767f2880ca --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr006.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_OPT/podrwposwr006.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_OPT/podrwposwr006.c new file mode 100644 index 00000000000..8de979609b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_OPT/podrwposwr006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_OPT/test.desc new file mode 100644 index 00000000000..70914217ad2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr006.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_ALL/podrwposwr006.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_ALL/podrwposwr006.c new file mode 100644 index 00000000000..8de979609b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_ALL/podrwposwr006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_ALL/test.desc new file mode 100644 index 00000000000..df020635b0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr006.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_OPC/podrwposwr006.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_OPC/podrwposwr006.c new file mode 100644 index 00000000000..8de979609b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_OPC/podrwposwr006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_OPC/test.desc new file mode 100644 index 00000000000..32a3f2e2bd4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr006.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_OPT/podrwposwr006.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_OPT/podrwposwr006.c new file mode 100644 index 00000000000..8de979609b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_OPT/podrwposwr006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_OPT/test.desc new file mode 100644 index 00000000000..ed232b6f08f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr006.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_SC_SAFE/podrwposwr006.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_SC_SAFE/podrwposwr006.c new file mode 100644 index 00000000000..8de979609b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_SC_SAFE/podrwposwr006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_SC_SAFE/test.desc new file mode 100644 index 00000000000..4b0723b0832 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr006.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_ALL/podrwposwr006.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_ALL/podrwposwr006.c new file mode 100644 index 00000000000..8de979609b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_ALL/podrwposwr006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_ALL/test.desc new file mode 100644 index 00000000000..1883d1be6c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr006.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_OPC/podrwposwr006.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_OPC/podrwposwr006.c new file mode 100644 index 00000000000..8de979609b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_OPC/podrwposwr006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_OPC/test.desc new file mode 100644 index 00000000000..ba7dedbc76d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr006.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_OPT/podrwposwr006.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_OPT/podrwposwr006.c new file mode 100644 index 00000000000..8de979609b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_OPT/podrwposwr006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_OPT/test.desc new file mode 100644 index 00000000000..ea693387129 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr006_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr006.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_CAV11_SAFE/podrwposwr007.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_CAV11_SAFE/podrwposwr007.c new file mode 100644 index 00000000000..8a5f07c7a3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_CAV11_SAFE/podrwposwr007.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..b8eaed474fe --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr007.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_POWER_ALL/podrwposwr007.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_POWER_ALL/podrwposwr007.c new file mode 100644 index 00000000000..8a5f07c7a3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_POWER_ALL/podrwposwr007.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_POWER_ALL/test.desc new file mode 100644 index 00000000000..043070f6e64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr007.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_POWER_OPC/podrwposwr007.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_POWER_OPC/podrwposwr007.c new file mode 100644 index 00000000000..8a5f07c7a3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_POWER_OPC/podrwposwr007.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_POWER_OPC/test.desc new file mode 100644 index 00000000000..34babbbfc5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr007.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_POWER_OPT/test.desc index f749e08ea12..5e74395cfbc 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk podrwposwr007.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_ALL/podrwposwr007.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_ALL/podrwposwr007.c new file mode 100644 index 00000000000..8a5f07c7a3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_ALL/podrwposwr007.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_ALL/test.desc new file mode 100644 index 00000000000..2c4f99be1bf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr007.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_OPC/podrwposwr007.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_OPC/podrwposwr007.c new file mode 100644 index 00000000000..8a5f07c7a3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_OPC/podrwposwr007.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_OPC/test.desc new file mode 100644 index 00000000000..d4b49ee4cf7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr007.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_OPT/podrwposwr007.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_OPT/podrwposwr007.c new file mode 100644 index 00000000000..8a5f07c7a3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_OPT/podrwposwr007.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_OPT/test.desc new file mode 100644 index 00000000000..a7e6416c38a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr007.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_ALL/podrwposwr007.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_ALL/podrwposwr007.c new file mode 100644 index 00000000000..8a5f07c7a3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_ALL/podrwposwr007.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_ALL/test.desc new file mode 100644 index 00000000000..53cb5c53516 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr007.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_OPC/podrwposwr007.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_OPC/podrwposwr007.c new file mode 100644 index 00000000000..8a5f07c7a3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_OPC/podrwposwr007.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_OPC/test.desc new file mode 100644 index 00000000000..0da0271054f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr007.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_OPT/podrwposwr007.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_OPT/podrwposwr007.c new file mode 100644 index 00000000000..8a5f07c7a3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_OPT/podrwposwr007.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_OPT/test.desc new file mode 100644 index 00000000000..04e39525825 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr007.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_SC_SAFE/podrwposwr007.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_SC_SAFE/podrwposwr007.c new file mode 100644 index 00000000000..8a5f07c7a3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_SC_SAFE/podrwposwr007.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_SC_SAFE/test.desc new file mode 100644 index 00000000000..e7f72835b9d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr007.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_ALL/podrwposwr007.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_ALL/podrwposwr007.c new file mode 100644 index 00000000000..8a5f07c7a3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_ALL/podrwposwr007.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_ALL/test.desc new file mode 100644 index 00000000000..d9caf574a51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr007.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_OPC/podrwposwr007.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_OPC/podrwposwr007.c new file mode 100644 index 00000000000..8a5f07c7a3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_OPC/podrwposwr007.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_OPC/test.desc new file mode 100644 index 00000000000..43352fb2808 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr007.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_OPT/podrwposwr007.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_OPT/podrwposwr007.c new file mode 100644 index 00000000000..8a5f07c7a3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_OPT/podrwposwr007.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_OPT/test.desc new file mode 100644 index 00000000000..4b198af74f3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr007_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr007.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_CAV11_ERROR/podrwposwr008.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_CAV11_ERROR/podrwposwr008.c new file mode 100644 index 00000000000..1e083a56240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_CAV11_ERROR/podrwposwr008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..e7baad8ed87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr008.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_POWER_ALL/podrwposwr008.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_POWER_ALL/podrwposwr008.c new file mode 100644 index 00000000000..1e083a56240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_POWER_ALL/podrwposwr008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_POWER_ALL/test.desc new file mode 100644 index 00000000000..2d00302f9be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr008.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_POWER_OPC/podrwposwr008.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_POWER_OPC/podrwposwr008.c new file mode 100644 index 00000000000..1e083a56240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_POWER_OPC/podrwposwr008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_POWER_OPC/test.desc new file mode 100644 index 00000000000..b131a25605a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr008.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_POWER_OPT/test.desc index e5ce2be03f9..4d13a6931b7 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk podrwposwr008.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_ALL/podrwposwr008.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_ALL/podrwposwr008.c new file mode 100644 index 00000000000..1e083a56240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_ALL/podrwposwr008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_ALL/test.desc new file mode 100644 index 00000000000..a344d4ffd2d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr008.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_OPC/podrwposwr008.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_OPC/podrwposwr008.c new file mode 100644 index 00000000000..1e083a56240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_OPC/podrwposwr008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_OPC/test.desc new file mode 100644 index 00000000000..3c76cae1247 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr008.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_OPT/podrwposwr008.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_OPT/podrwposwr008.c new file mode 100644 index 00000000000..1e083a56240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_OPT/podrwposwr008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_OPT/test.desc new file mode 100644 index 00000000000..4f45b72e1a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr008.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_ALL/podrwposwr008.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_ALL/podrwposwr008.c new file mode 100644 index 00000000000..1e083a56240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_ALL/podrwposwr008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_ALL/test.desc new file mode 100644 index 00000000000..3875820102c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr008.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_OPC/podrwposwr008.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_OPC/podrwposwr008.c new file mode 100644 index 00000000000..1e083a56240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_OPC/podrwposwr008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_OPC/test.desc new file mode 100644 index 00000000000..d8c07b579bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr008.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_OPT/podrwposwr008.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_OPT/podrwposwr008.c new file mode 100644 index 00000000000..1e083a56240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_OPT/podrwposwr008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_OPT/test.desc new file mode 100644 index 00000000000..0ae1cbc5d75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr008.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_SC_SAFE/podrwposwr008.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_SC_SAFE/podrwposwr008.c new file mode 100644 index 00000000000..1e083a56240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_SC_SAFE/podrwposwr008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_SC_SAFE/test.desc new file mode 100644 index 00000000000..2914232b80f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr008.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_ALL/podrwposwr008.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_ALL/podrwposwr008.c new file mode 100644 index 00000000000..1e083a56240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_ALL/podrwposwr008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_ALL/test.desc new file mode 100644 index 00000000000..fc63b26de75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr008.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_OPC/podrwposwr008.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_OPC/podrwposwr008.c new file mode 100644 index 00000000000..1e083a56240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_OPC/podrwposwr008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_OPC/test.desc new file mode 100644 index 00000000000..e3a506c2e30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr008.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_OPT/podrwposwr008.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_OPT/podrwposwr008.c new file mode 100644 index 00000000000..1e083a56240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_OPT/podrwposwr008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_OPT/test.desc new file mode 100644 index 00000000000..e91cdef632d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr008_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr008.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_CAV11_ERROR/podrwposwr009.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_CAV11_ERROR/podrwposwr009.c new file mode 100644 index 00000000000..a1ece5d600f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_CAV11_ERROR/podrwposwr009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = 1; + *(&x + __unbuffered_p1_r6) = __unbuffered_p1_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..808b74aef19 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr009.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_ALL/podrwposwr009.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_ALL/podrwposwr009.c new file mode 100644 index 00000000000..a1ece5d600f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_ALL/podrwposwr009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = 1; + *(&x + __unbuffered_p1_r6) = __unbuffered_p1_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_ALL/test.desc new file mode 100644 index 00000000000..9d3e7a9cf2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr009.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_OPC/podrwposwr009.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_OPC/podrwposwr009.c new file mode 100644 index 00000000000..a1ece5d600f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_OPC/podrwposwr009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = 1; + *(&x + __unbuffered_p1_r6) = __unbuffered_p1_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_OPC/test.desc new file mode 100644 index 00000000000..956b4b91b39 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr009.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_OPT/podrwposwr009.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_OPT/podrwposwr009.c new file mode 100644 index 00000000000..a1ece5d600f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_OPT/podrwposwr009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = 1; + *(&x + __unbuffered_p1_r6) = __unbuffered_p1_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_OPT/test.desc new file mode 100644 index 00000000000..139606d06d8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr009.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_ALL/podrwposwr009.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_ALL/podrwposwr009.c new file mode 100644 index 00000000000..a1ece5d600f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_ALL/podrwposwr009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = 1; + *(&x + __unbuffered_p1_r6) = __unbuffered_p1_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_ALL/test.desc new file mode 100644 index 00000000000..fae2a95c3da --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +podrwposwr009.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_OPC/podrwposwr009.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_OPC/podrwposwr009.c new file mode 100644 index 00000000000..a1ece5d600f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_OPC/podrwposwr009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = 1; + *(&x + __unbuffered_p1_r6) = __unbuffered_p1_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_OPC/test.desc new file mode 100644 index 00000000000..a0908fd7944 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +podrwposwr009.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_OPT/podrwposwr009.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_OPT/podrwposwr009.c new file mode 100644 index 00000000000..a1ece5d600f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_OPT/podrwposwr009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = 1; + *(&x + __unbuffered_p1_r6) = __unbuffered_p1_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_OPT/test.desc new file mode 100644 index 00000000000..e66629cfd26 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr009.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_ALL/podrwposwr009.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_ALL/podrwposwr009.c new file mode 100644 index 00000000000..a1ece5d600f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_ALL/podrwposwr009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = 1; + *(&x + __unbuffered_p1_r6) = __unbuffered_p1_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_ALL/test.desc new file mode 100644 index 00000000000..955cb59ea09 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr009.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_OPC/podrwposwr009.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_OPC/podrwposwr009.c new file mode 100644 index 00000000000..a1ece5d600f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_OPC/podrwposwr009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = 1; + *(&x + __unbuffered_p1_r6) = __unbuffered_p1_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_OPC/test.desc new file mode 100644 index 00000000000..85014ef4e62 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr009.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_OPT/podrwposwr009.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_OPT/podrwposwr009.c new file mode 100644 index 00000000000..a1ece5d600f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_OPT/podrwposwr009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = 1; + *(&x + __unbuffered_p1_r6) = __unbuffered_p1_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_OPT/test.desc new file mode 100644 index 00000000000..c6bad36671a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr009.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_SC_SAFE/podrwposwr009.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_SC_SAFE/podrwposwr009.c new file mode 100644 index 00000000000..a1ece5d600f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_SC_SAFE/podrwposwr009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = 1; + *(&x + __unbuffered_p1_r6) = __unbuffered_p1_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_SC_SAFE/test.desc new file mode 100644 index 00000000000..339a832af86 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr009.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_ALL/podrwposwr009.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_ALL/podrwposwr009.c new file mode 100644 index 00000000000..a1ece5d600f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_ALL/podrwposwr009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = 1; + *(&x + __unbuffered_p1_r6) = __unbuffered_p1_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_ALL/test.desc new file mode 100644 index 00000000000..f17ae361cb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +podrwposwr009.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_OPC/podrwposwr009.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_OPC/podrwposwr009.c new file mode 100644 index 00000000000..a1ece5d600f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_OPC/podrwposwr009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = 1; + *(&x + __unbuffered_p1_r6) = __unbuffered_p1_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_OPC/test.desc new file mode 100644 index 00000000000..5fba1198875 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +podrwposwr009.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_OPT/podrwposwr009.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_OPT/podrwposwr009.c new file mode 100644 index 00000000000..a1ece5d600f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_OPT/podrwposwr009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + __unbuffered_p1_r5 = z; + __unbuffered_p1_r6 = __unbuffered_p1_r5 ^ __unbuffered_p1_r5; + __unbuffered_p1_r7 = 1; + *(&x + __unbuffered_p1_r6) = __unbuffered_p1_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_OPT/test.desc new file mode 100644 index 00000000000..2caec36c208 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr009_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr009.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_CAV11_ERROR/podrwposwr010.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_CAV11_ERROR/podrwposwr010.c new file mode 100644 index 00000000000..401eea0c50f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_CAV11_ERROR/podrwposwr010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..b766351e5e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr010.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_POWER_ALL/podrwposwr010.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_POWER_ALL/podrwposwr010.c new file mode 100644 index 00000000000..401eea0c50f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_POWER_ALL/podrwposwr010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_POWER_ALL/test.desc new file mode 100644 index 00000000000..2a7daa9c16e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr010.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_POWER_OPC/podrwposwr010.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_POWER_OPC/podrwposwr010.c new file mode 100644 index 00000000000..401eea0c50f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_POWER_OPC/podrwposwr010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_POWER_OPC/test.desc new file mode 100644 index 00000000000..15961b425ee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr010.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_POWER_OPT/test.desc index bc66a6fda94..18bb50deb1e 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk podrwposwr010.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_ALL/podrwposwr010.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_ALL/podrwposwr010.c new file mode 100644 index 00000000000..401eea0c50f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_ALL/podrwposwr010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_ALL/test.desc new file mode 100644 index 00000000000..fc28862a25d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr010.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_OPC/podrwposwr010.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_OPC/podrwposwr010.c new file mode 100644 index 00000000000..401eea0c50f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_OPC/podrwposwr010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_OPC/test.desc new file mode 100644 index 00000000000..c464fa71218 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr010.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_OPT/podrwposwr010.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_OPT/podrwposwr010.c new file mode 100644 index 00000000000..401eea0c50f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_OPT/podrwposwr010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_OPT/test.desc new file mode 100644 index 00000000000..12b4728593b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr010.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_ALL/podrwposwr010.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_ALL/podrwposwr010.c new file mode 100644 index 00000000000..401eea0c50f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_ALL/podrwposwr010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_ALL/test.desc new file mode 100644 index 00000000000..ce9a217d0e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr010.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_OPC/podrwposwr010.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_OPC/podrwposwr010.c new file mode 100644 index 00000000000..401eea0c50f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_OPC/podrwposwr010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_OPC/test.desc new file mode 100644 index 00000000000..17094562bd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr010.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_OPT/podrwposwr010.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_OPT/podrwposwr010.c new file mode 100644 index 00000000000..401eea0c50f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_OPT/podrwposwr010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_OPT/test.desc new file mode 100644 index 00000000000..78d9f2c6035 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr010.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_SC_SAFE/podrwposwr010.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_SC_SAFE/podrwposwr010.c new file mode 100644 index 00000000000..401eea0c50f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_SC_SAFE/podrwposwr010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_SC_SAFE/test.desc new file mode 100644 index 00000000000..6de0d8d2c43 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr010.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_ALL/podrwposwr010.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_ALL/podrwposwr010.c new file mode 100644 index 00000000000..401eea0c50f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_ALL/podrwposwr010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_ALL/test.desc new file mode 100644 index 00000000000..1a6bc1fd293 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr010.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_OPC/podrwposwr010.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_OPC/podrwposwr010.c new file mode 100644 index 00000000000..401eea0c50f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_OPC/podrwposwr010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_OPC/test.desc new file mode 100644 index 00000000000..3e4b768f0f9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr010.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_OPT/podrwposwr010.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_OPT/podrwposwr010.c new file mode 100644 index 00000000000..401eea0c50f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_OPT/podrwposwr010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_OPT/test.desc new file mode 100644 index 00000000000..d4f2a43d4f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr010_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr010.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_CAV11_ERROR/podrwposwr011.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_CAV11_ERROR/podrwposwr011.c new file mode 100644 index 00000000000..2c78b38dfcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_CAV11_ERROR/podrwposwr011.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..b0bd68f75e1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr011.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_POWER_ALL/podrwposwr011.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_POWER_ALL/podrwposwr011.c new file mode 100644 index 00000000000..2c78b38dfcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_POWER_ALL/podrwposwr011.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_POWER_ALL/test.desc new file mode 100644 index 00000000000..b24f366aad7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr011.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_POWER_OPC/podrwposwr011.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_POWER_OPC/podrwposwr011.c new file mode 100644 index 00000000000..2c78b38dfcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_POWER_OPC/podrwposwr011.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_POWER_OPC/test.desc new file mode 100644 index 00000000000..168e278faab --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr011.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_POWER_OPT/test.desc index 3a3ccdfaf16..557f2f57fa0 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk podrwposwr011.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_ALL/podrwposwr011.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_ALL/podrwposwr011.c new file mode 100644 index 00000000000..2c78b38dfcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_ALL/podrwposwr011.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_ALL/test.desc new file mode 100644 index 00000000000..a3ad9aa6ea7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr011.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_OPC/podrwposwr011.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_OPC/podrwposwr011.c new file mode 100644 index 00000000000..2c78b38dfcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_OPC/podrwposwr011.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_OPC/test.desc new file mode 100644 index 00000000000..222cb0b3288 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr011.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_OPT/podrwposwr011.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_OPT/podrwposwr011.c new file mode 100644 index 00000000000..2c78b38dfcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_OPT/podrwposwr011.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_OPT/test.desc new file mode 100644 index 00000000000..fdf73433190 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr011.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_ALL/podrwposwr011.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_ALL/podrwposwr011.c new file mode 100644 index 00000000000..2c78b38dfcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_ALL/podrwposwr011.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_ALL/test.desc new file mode 100644 index 00000000000..a572a6370df --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr011.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_OPC/podrwposwr011.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_OPC/podrwposwr011.c new file mode 100644 index 00000000000..2c78b38dfcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_OPC/podrwposwr011.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_OPC/test.desc new file mode 100644 index 00000000000..be268985025 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr011.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_OPT/podrwposwr011.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_OPT/podrwposwr011.c new file mode 100644 index 00000000000..2c78b38dfcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_OPT/podrwposwr011.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_OPT/test.desc new file mode 100644 index 00000000000..c70acac8f9a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr011.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_SC_SAFE/podrwposwr011.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_SC_SAFE/podrwposwr011.c new file mode 100644 index 00000000000..2c78b38dfcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_SC_SAFE/podrwposwr011.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_SC_SAFE/test.desc new file mode 100644 index 00000000000..7b2dde11ef1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr011.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_ALL/podrwposwr011.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_ALL/podrwposwr011.c new file mode 100644 index 00000000000..2c78b38dfcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_ALL/podrwposwr011.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_ALL/test.desc new file mode 100644 index 00000000000..585477f73d5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr011.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_OPC/podrwposwr011.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_OPC/podrwposwr011.c new file mode 100644 index 00000000000..2c78b38dfcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_OPC/podrwposwr011.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_OPC/test.desc new file mode 100644 index 00000000000..64539ab0c66 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr011.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_OPT/podrwposwr011.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_OPT/podrwposwr011.c new file mode 100644 index 00000000000..2c78b38dfcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_OPT/podrwposwr011.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p2_r1 == 1 && __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_OPT/test.desc new file mode 100644 index 00000000000..afe55c41864 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr011_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr011.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_CAV11_ERROR/podrwposwr012.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_CAV11_ERROR/podrwposwr012.c new file mode 100644 index 00000000000..3fedd6602e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_CAV11_ERROR/podrwposwr012.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..99f5e7a1221 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr012.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_POWER_ALL/podrwposwr012.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_POWER_ALL/podrwposwr012.c new file mode 100644 index 00000000000..3fedd6602e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_POWER_ALL/podrwposwr012.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_POWER_ALL/test.desc new file mode 100644 index 00000000000..5a430fc0d99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr012.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_POWER_OPC/podrwposwr012.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_POWER_OPC/podrwposwr012.c new file mode 100644 index 00000000000..3fedd6602e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_POWER_OPC/podrwposwr012.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_POWER_OPC/test.desc new file mode 100644 index 00000000000..80bd414bd26 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr012.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_POWER_OPT/test.desc index 063c0934067..6d2c2927168 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk podrwposwr012.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_ALL/podrwposwr012.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_ALL/podrwposwr012.c new file mode 100644 index 00000000000..3fedd6602e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_ALL/podrwposwr012.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_ALL/test.desc new file mode 100644 index 00000000000..7ccfd8666c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +podrwposwr012.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_OPC/podrwposwr012.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_OPC/podrwposwr012.c new file mode 100644 index 00000000000..3fedd6602e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_OPC/podrwposwr012.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_OPC/test.desc new file mode 100644 index 00000000000..1a6a8de71be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +podrwposwr012.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_OPT/podrwposwr012.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_OPT/podrwposwr012.c new file mode 100644 index 00000000000..3fedd6602e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_OPT/podrwposwr012.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_OPT/test.desc new file mode 100644 index 00000000000..e18c0f81e43 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr012.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_ALL/podrwposwr012.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_ALL/podrwposwr012.c new file mode 100644 index 00000000000..3fedd6602e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_ALL/podrwposwr012.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_ALL/test.desc new file mode 100644 index 00000000000..e193d49a154 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr012.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_OPC/podrwposwr012.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_OPC/podrwposwr012.c new file mode 100644 index 00000000000..3fedd6602e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_OPC/podrwposwr012.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_OPC/test.desc new file mode 100644 index 00000000000..5a78a436f3e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr012.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_OPT/podrwposwr012.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_OPT/podrwposwr012.c new file mode 100644 index 00000000000..3fedd6602e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_OPT/podrwposwr012.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_OPT/test.desc new file mode 100644 index 00000000000..505bdf829fb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr012.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_SC_SAFE/podrwposwr012.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_SC_SAFE/podrwposwr012.c new file mode 100644 index 00000000000..3fedd6602e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_SC_SAFE/podrwposwr012.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_SC_SAFE/test.desc new file mode 100644 index 00000000000..ec8dc5bca78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr012.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_ALL/podrwposwr012.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_ALL/podrwposwr012.c new file mode 100644 index 00000000000..3fedd6602e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_ALL/podrwposwr012.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_ALL/test.desc new file mode 100644 index 00000000000..8285d0a40ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +podrwposwr012.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_OPC/podrwposwr012.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_OPC/podrwposwr012.c new file mode 100644 index 00000000000..3fedd6602e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_OPC/podrwposwr012.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_OPC/test.desc new file mode 100644 index 00000000000..46769c42016 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +podrwposwr012.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_OPT/podrwposwr012.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_OPT/podrwposwr012.c new file mode 100644 index 00000000000..3fedd6602e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_OPT/podrwposwr012.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_OPT/test.desc new file mode 100644 index 00000000000..3fb1ba50541 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr012_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr012.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_CAV11_ERROR/podrwposwr013.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_CAV11_ERROR/podrwposwr013.c new file mode 100644 index 00000000000..10d02edb72a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_CAV11_ERROR/podrwposwr013.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..c8c2948e421 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr013.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_POWER_ALL/podrwposwr013.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_POWER_ALL/podrwposwr013.c new file mode 100644 index 00000000000..10d02edb72a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_POWER_ALL/podrwposwr013.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_POWER_ALL/test.desc new file mode 100644 index 00000000000..25fa5362b30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +podrwposwr013.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_POWER_OPC/podrwposwr013.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_POWER_OPC/podrwposwr013.c new file mode 100644 index 00000000000..10d02edb72a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_POWER_OPC/podrwposwr013.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_POWER_OPC/test.desc new file mode 100644 index 00000000000..b8cd57f4eea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr013.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_POWER_OPT/test.desc index 51a22558daa..879ecf96200 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk podrwposwr013.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_ALL/podrwposwr013.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_ALL/podrwposwr013.c new file mode 100644 index 00000000000..10d02edb72a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_ALL/podrwposwr013.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_ALL/test.desc new file mode 100644 index 00000000000..92047a98174 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr013.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_OPC/podrwposwr013.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_OPC/podrwposwr013.c new file mode 100644 index 00000000000..10d02edb72a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_OPC/podrwposwr013.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_OPC/test.desc new file mode 100644 index 00000000000..411760a76bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr013.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_OPT/podrwposwr013.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_OPT/podrwposwr013.c new file mode 100644 index 00000000000..10d02edb72a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_OPT/podrwposwr013.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_OPT/test.desc new file mode 100644 index 00000000000..2505174e378 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr013.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_ALL/podrwposwr013.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_ALL/podrwposwr013.c new file mode 100644 index 00000000000..10d02edb72a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_ALL/podrwposwr013.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_ALL/test.desc new file mode 100644 index 00000000000..de336ac5711 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +podrwposwr013.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_OPC/podrwposwr013.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_OPC/podrwposwr013.c new file mode 100644 index 00000000000..10d02edb72a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_OPC/podrwposwr013.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_OPC/test.desc new file mode 100644 index 00000000000..8874340ddcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr013.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_OPT/podrwposwr013.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_OPT/podrwposwr013.c new file mode 100644 index 00000000000..10d02edb72a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_OPT/podrwposwr013.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_OPT/test.desc new file mode 100644 index 00000000000..db436738bfc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr013.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_SC_SAFE/podrwposwr013.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_SC_SAFE/podrwposwr013.c new file mode 100644 index 00000000000..10d02edb72a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_SC_SAFE/podrwposwr013.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_SC_SAFE/test.desc new file mode 100644 index 00000000000..7e0c28a5b5d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr013.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_ALL/podrwposwr013.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_ALL/podrwposwr013.c new file mode 100644 index 00000000000..10d02edb72a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_ALL/podrwposwr013.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_ALL/test.desc new file mode 100644 index 00000000000..e6cd6b4d48c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr013.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_OPC/podrwposwr013.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_OPC/podrwposwr013.c new file mode 100644 index 00000000000..10d02edb72a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_OPC/podrwposwr013.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_OPC/test.desc new file mode 100644 index 00000000000..70b250967b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr013.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_OPT/podrwposwr013.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_OPT/podrwposwr013.c new file mode 100644 index 00000000000..10d02edb72a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_OPT/podrwposwr013.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + __unbuffered_p2_r5 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r5 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_OPT/test.desc new file mode 100644 index 00000000000..9052de41eb1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr013_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr013.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_CAV11_SAFE/podrwposwr014.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_CAV11_SAFE/podrwposwr014.c new file mode 100644 index 00000000000..40d9ba41d9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_CAV11_SAFE/podrwposwr014.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..c5af9113cc5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr014.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_POWER_ALL/podrwposwr014.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_POWER_ALL/podrwposwr014.c new file mode 100644 index 00000000000..40d9ba41d9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_POWER_ALL/podrwposwr014.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_POWER_ALL/test.desc new file mode 100644 index 00000000000..004393c77d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr014.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_POWER_OPC/podrwposwr014.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_POWER_OPC/podrwposwr014.c new file mode 100644 index 00000000000..40d9ba41d9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_POWER_OPC/podrwposwr014.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_POWER_OPC/test.desc new file mode 100644 index 00000000000..8bb564048f2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr014.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_POWER_OPT/test.desc index a775c2fd36a..a2264116982 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk podrwposwr014.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_ALL/podrwposwr014.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_ALL/podrwposwr014.c new file mode 100644 index 00000000000..40d9ba41d9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_ALL/podrwposwr014.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_ALL/test.desc new file mode 100644 index 00000000000..49213739c7b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr014.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_OPC/podrwposwr014.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_OPC/podrwposwr014.c new file mode 100644 index 00000000000..40d9ba41d9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_OPC/podrwposwr014.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_OPC/test.desc new file mode 100644 index 00000000000..29ffbaff3c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr014.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_OPT/podrwposwr014.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_OPT/podrwposwr014.c new file mode 100644 index 00000000000..40d9ba41d9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_OPT/podrwposwr014.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_OPT/test.desc new file mode 100644 index 00000000000..b3def2b625f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr014.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_ALL/podrwposwr014.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_ALL/podrwposwr014.c new file mode 100644 index 00000000000..40d9ba41d9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_ALL/podrwposwr014.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_ALL/test.desc new file mode 100644 index 00000000000..bc1a481f2d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr014.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_OPC/podrwposwr014.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_OPC/podrwposwr014.c new file mode 100644 index 00000000000..40d9ba41d9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_OPC/podrwposwr014.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_OPC/test.desc new file mode 100644 index 00000000000..3722e87adf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr014.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_OPT/podrwposwr014.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_OPT/podrwposwr014.c new file mode 100644 index 00000000000..40d9ba41d9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_OPT/podrwposwr014.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_OPT/test.desc new file mode 100644 index 00000000000..9fe51dcb5c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr014.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_SC_SAFE/podrwposwr014.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_SC_SAFE/podrwposwr014.c new file mode 100644 index 00000000000..40d9ba41d9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_SC_SAFE/podrwposwr014.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_SC_SAFE/test.desc new file mode 100644 index 00000000000..b1deef7de25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr014.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_ALL/podrwposwr014.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_ALL/podrwposwr014.c new file mode 100644 index 00000000000..40d9ba41d9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_ALL/podrwposwr014.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_ALL/test.desc new file mode 100644 index 00000000000..163834af448 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr014.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_OPC/podrwposwr014.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_OPC/podrwposwr014.c new file mode 100644 index 00000000000..40d9ba41d9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_OPC/podrwposwr014.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_OPC/test.desc new file mode 100644 index 00000000000..befa80ccbda --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr014.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_OPT/podrwposwr014.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_OPT/podrwposwr014.c new file mode 100644 index 00000000000..40d9ba41d9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_OPT/podrwposwr014.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = *(&x + __unbuffered_p2_r6); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_OPT/test.desc new file mode 100644 index 00000000000..91e7f80fa0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr014_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr014.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_CAV11_ERROR/podrwposwr015.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_CAV11_ERROR/podrwposwr015.c new file mode 100644 index 00000000000..bae67e3f495 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_CAV11_ERROR/podrwposwr015.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..76a8a4112d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr015.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_POWER_ALL/podrwposwr015.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_POWER_ALL/podrwposwr015.c new file mode 100644 index 00000000000..bae67e3f495 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_POWER_ALL/podrwposwr015.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_POWER_ALL/test.desc new file mode 100644 index 00000000000..f9499fa7e24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr015.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_POWER_OPC/podrwposwr015.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_POWER_OPC/podrwposwr015.c new file mode 100644 index 00000000000..bae67e3f495 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_POWER_OPC/podrwposwr015.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_POWER_OPC/test.desc new file mode 100644 index 00000000000..854cd8dafa9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr015.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_POWER_OPT/test.desc index a7eeab4022c..6133f7f07ce 100644 --- a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk podrwposwr015.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_ALL/podrwposwr015.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_ALL/podrwposwr015.c new file mode 100644 index 00000000000..bae67e3f495 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_ALL/podrwposwr015.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_ALL/test.desc new file mode 100644 index 00000000000..7250431f74e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr015.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_OPC/podrwposwr015.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_OPC/podrwposwr015.c new file mode 100644 index 00000000000..bae67e3f495 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_OPC/podrwposwr015.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_OPC/test.desc new file mode 100644 index 00000000000..e373e41cdf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr015.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_OPT/podrwposwr015.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_OPT/podrwposwr015.c new file mode 100644 index 00000000000..bae67e3f495 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_OPT/podrwposwr015.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_OPT/test.desc new file mode 100644 index 00000000000..07f8c3e8550 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr015.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_ALL/podrwposwr015.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_ALL/podrwposwr015.c new file mode 100644 index 00000000000..bae67e3f495 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_ALL/podrwposwr015.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_ALL/test.desc new file mode 100644 index 00000000000..aff700521e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr015.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_OPC/podrwposwr015.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_OPC/podrwposwr015.c new file mode 100644 index 00000000000..bae67e3f495 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_OPC/podrwposwr015.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_OPC/test.desc new file mode 100644 index 00000000000..338ba341f5e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr015.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_OPT/podrwposwr015.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_OPT/podrwposwr015.c new file mode 100644 index 00000000000..bae67e3f495 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_OPT/podrwposwr015.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_OPT/test.desc new file mode 100644 index 00000000000..cb467435e2f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr015.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_SC_SAFE/podrwposwr015.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_SC_SAFE/podrwposwr015.c new file mode 100644 index 00000000000..bae67e3f495 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_SC_SAFE/podrwposwr015.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_SC_SAFE/test.desc new file mode 100644 index 00000000000..ec139762cbb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr015.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_ALL/podrwposwr015.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_ALL/podrwposwr015.c new file mode 100644 index 00000000000..bae67e3f495 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_ALL/podrwposwr015.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_ALL/test.desc new file mode 100644 index 00000000000..ba82d11db4b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr015.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_OPC/podrwposwr015.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_OPC/podrwposwr015.c new file mode 100644 index 00000000000..bae67e3f495 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_OPC/podrwposwr015.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_OPC/test.desc new file mode 100644 index 00000000000..f42ba17a30f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podrwposwr015.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_OPT/podrwposwr015.c b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_OPT/podrwposwr015.c new file mode 100644 index 00000000000..bae67e3f495 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_OPT/podrwposwr015.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r5 = 0; +int __unbuffered_p2_r6 = 0; +int __unbuffered_p2_r7 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + z = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = 1; + a = __unbuffered_p2_r3; + __unbuffered_p2_r5 = a; + __unbuffered_p2_r6 = __unbuffered_p2_r5 ^ __unbuffered_p2_r5; + __unbuffered_p2_r7 = 1; + *(&x + __unbuffered_p2_r6) = __unbuffered_p2_r7; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_OPT/test.desc new file mode 100644 index 00000000000..a61a9b99e73 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podrwposwr015_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podrwposwr015.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_CAV11_ERROR/podwr000.c b/regression/goto-instrument-wmm-core/ppc_podwr000_CAV11_ERROR/podwr000.c new file mode 100644 index 00000000000..62c757888bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_CAV11_ERROR/podwr000.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..6e2917af4e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_ALL/podwr000.c b/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_ALL/podwr000.c new file mode 100644 index 00000000000..62c757888bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_ALL/podwr000.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_ALL/test.desc new file mode 100644 index 00000000000..421473351ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_OPC/podwr000.c b/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_OPC/podwr000.c new file mode 100644 index 00000000000..62c757888bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_OPC/podwr000.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_OPC/test.desc new file mode 100644 index 00000000000..97ce6bfc272 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_OPT/podwr000.c b/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_OPT/podwr000.c new file mode 100644 index 00000000000..62c757888bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_OPT/podwr000.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_OPT/test.desc new file mode 100644 index 00000000000..cc87e5a74bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podwr000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_ALL/podwr000.c b/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_ALL/podwr000.c new file mode 100644 index 00000000000..62c757888bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_ALL/podwr000.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_ALL/test.desc new file mode 100644 index 00000000000..48569ae5d06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_OPC/podwr000.c b/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_OPC/podwr000.c new file mode 100644 index 00000000000..62c757888bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_OPC/podwr000.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_OPC/test.desc new file mode 100644 index 00000000000..761beeaa1e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_OPT/podwr000.c b/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_OPT/podwr000.c new file mode 100644 index 00000000000..62c757888bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_OPT/podwr000.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_OPT/test.desc new file mode 100644 index 00000000000..f503ceb5af2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podwr000.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_ALL/podwr000.c b/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_ALL/podwr000.c new file mode 100644 index 00000000000..62c757888bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_ALL/podwr000.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_ALL/test.desc new file mode 100644 index 00000000000..314af57c53c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_OPC/podwr000.c b/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_OPC/podwr000.c new file mode 100644 index 00000000000..62c757888bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_OPC/podwr000.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_OPC/test.desc new file mode 100644 index 00000000000..6b2118f2c8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_OPT/podwr000.c b/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_OPT/podwr000.c new file mode 100644 index 00000000000..62c757888bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_OPT/podwr000.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_OPT/test.desc new file mode 100644 index 00000000000..fb1ea8b980c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podwr000.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_SC_SAFE/podwr000.c b/regression/goto-instrument-wmm-core/ppc_podwr000_SC_SAFE/podwr000.c new file mode 100644 index 00000000000..62c757888bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_SC_SAFE/podwr000.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr000_SC_SAFE/test.desc new file mode 100644 index 00000000000..9c47ff843cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_ALL/podwr000.c b/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_ALL/podwr000.c new file mode 100644 index 00000000000..62c757888bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_ALL/podwr000.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_ALL/test.desc new file mode 100644 index 00000000000..f49bd51d72d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_OPC/podwr000.c b/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_OPC/podwr000.c new file mode 100644 index 00000000000..62c757888bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_OPC/podwr000.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_OPC/test.desc new file mode 100644 index 00000000000..9f6827af1d1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_OPT/podwr000.c b/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_OPT/podwr000.c new file mode 100644 index 00000000000..62c757888bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_OPT/podwr000.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_OPT/test.desc new file mode 100644 index 00000000000..6c7700a1475 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podwr000.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_CAV11_ERROR/podwr001.c b/regression/goto-instrument-wmm-core/ppc_podwr001_CAV11_ERROR/podwr001.c new file mode 100644 index 00000000000..289f034e24b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_CAV11_ERROR/podwr001.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr001_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..dcfe4c9c5cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_ALL/podwr001.c b/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_ALL/podwr001.c new file mode 100644 index 00000000000..289f034e24b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_ALL/podwr001.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_ALL/test.desc new file mode 100644 index 00000000000..69b9a30c6a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_OPC/podwr001.c b/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_OPC/podwr001.c new file mode 100644 index 00000000000..289f034e24b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_OPC/podwr001.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_OPC/test.desc new file mode 100644 index 00000000000..d43a2d6578d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_OPT/podwr001.c b/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_OPT/podwr001.c new file mode 100644 index 00000000000..289f034e24b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_OPT/podwr001.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_OPT/test.desc new file mode 100644 index 00000000000..d80fba0078b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podwr001.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_ALL/podwr001.c b/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_ALL/podwr001.c new file mode 100644 index 00000000000..289f034e24b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_ALL/podwr001.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_ALL/test.desc new file mode 100644 index 00000000000..758a65e7954 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_OPC/podwr001.c b/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_OPC/podwr001.c new file mode 100644 index 00000000000..289f034e24b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_OPC/podwr001.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_OPC/test.desc new file mode 100644 index 00000000000..8ffd68a9c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_OPT/podwr001.c b/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_OPT/podwr001.c new file mode 100644 index 00000000000..289f034e24b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_OPT/podwr001.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_OPT/test.desc new file mode 100644 index 00000000000..a2bdbaafbe3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podwr001.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_ALL/podwr001.c b/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_ALL/podwr001.c new file mode 100644 index 00000000000..289f034e24b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_ALL/podwr001.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_ALL/test.desc new file mode 100644 index 00000000000..ff8dba920f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_OPC/podwr001.c b/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_OPC/podwr001.c new file mode 100644 index 00000000000..289f034e24b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_OPC/podwr001.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_OPC/test.desc new file mode 100644 index 00000000000..bcb0ab7ab19 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_OPT/podwr001.c b/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_OPT/podwr001.c new file mode 100644 index 00000000000..289f034e24b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_OPT/podwr001.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_OPT/test.desc new file mode 100644 index 00000000000..0749acb53fe --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podwr001.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_SC_SAFE/podwr001.c b/regression/goto-instrument-wmm-core/ppc_podwr001_SC_SAFE/podwr001.c new file mode 100644 index 00000000000..289f034e24b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_SC_SAFE/podwr001.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr001_SC_SAFE/test.desc new file mode 100644 index 00000000000..82566e39c24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_ALL/podwr001.c b/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_ALL/podwr001.c new file mode 100644 index 00000000000..289f034e24b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_ALL/podwr001.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_ALL/test.desc new file mode 100644 index 00000000000..2c3ebd2c375 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_OPC/podwr001.c b/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_OPC/podwr001.c new file mode 100644 index 00000000000..289f034e24b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_OPC/podwr001.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_OPC/test.desc new file mode 100644 index 00000000000..45a44de05cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_OPT/podwr001.c b/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_OPT/podwr001.c new file mode 100644 index 00000000000..289f034e24b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_OPT/podwr001.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_OPT/test.desc new file mode 100644 index 00000000000..5eeefd5d0b6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podwr001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podwr001.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_CAV11_ERROR/podww000.c b/regression/goto-instrument-wmm-core/ppc_podww000_CAV11_ERROR/podww000.c new file mode 100644 index 00000000000..ac1383d256c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_CAV11_ERROR/podww000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podww000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..ba56280d02c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podww000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_POWER_ALL/podww000.c b/regression/goto-instrument-wmm-core/ppc_podww000_POWER_ALL/podww000.c new file mode 100644 index 00000000000..ac1383d256c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_POWER_ALL/podww000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podww000_POWER_ALL/test.desc new file mode 100644 index 00000000000..a902791fed6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podww000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_POWER_OPC/podww000.c b/regression/goto-instrument-wmm-core/ppc_podww000_POWER_OPC/podww000.c new file mode 100644 index 00000000000..ac1383d256c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_POWER_OPC/podww000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podww000_POWER_OPC/test.desc new file mode 100644 index 00000000000..3025f626e93 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podww000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_POWER_OPT/podww000.c b/regression/goto-instrument-wmm-core/ppc_podww000_POWER_OPT/podww000.c new file mode 100644 index 00000000000..ac1383d256c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_POWER_OPT/podww000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podww000_POWER_OPT/test.desc new file mode 100644 index 00000000000..217e4c6e550 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podww000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_PSO_ALL/podww000.c b/regression/goto-instrument-wmm-core/ppc_podww000_PSO_ALL/podww000.c new file mode 100644 index 00000000000..ac1383d256c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_PSO_ALL/podww000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podww000_PSO_ALL/test.desc new file mode 100644 index 00000000000..5e28d89cc96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podww000.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_PSO_OPC/podww000.c b/regression/goto-instrument-wmm-core/ppc_podww000_PSO_OPC/podww000.c new file mode 100644 index 00000000000..ac1383d256c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_PSO_OPC/podww000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podww000_PSO_OPC/test.desc new file mode 100644 index 00000000000..f0e939703cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podww000.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_PSO_OPT/podww000.c b/regression/goto-instrument-wmm-core/ppc_podww000_PSO_OPT/podww000.c new file mode 100644 index 00000000000..ac1383d256c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_PSO_OPT/podww000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podww000_PSO_OPT/test.desc new file mode 100644 index 00000000000..56c75068aef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podww000.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_RMO_ALL/podww000.c b/regression/goto-instrument-wmm-core/ppc_podww000_RMO_ALL/podww000.c new file mode 100644 index 00000000000..ac1383d256c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_RMO_ALL/podww000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podww000_RMO_ALL/test.desc new file mode 100644 index 00000000000..d1d85f29836 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podww000.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_RMO_OPC/podww000.c b/regression/goto-instrument-wmm-core/ppc_podww000_RMO_OPC/podww000.c new file mode 100644 index 00000000000..ac1383d256c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_RMO_OPC/podww000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podww000_RMO_OPC/test.desc new file mode 100644 index 00000000000..04d6be00cc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podww000.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_RMO_OPT/podww000.c b/regression/goto-instrument-wmm-core/ppc_podww000_RMO_OPT/podww000.c new file mode 100644 index 00000000000..ac1383d256c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_RMO_OPT/podww000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podww000_RMO_OPT/test.desc new file mode 100644 index 00000000000..40c44d46191 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podww000.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_SC_SAFE/podww000.c b/regression/goto-instrument-wmm-core/ppc_podww000_SC_SAFE/podww000.c new file mode 100644 index 00000000000..ac1383d256c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_SC_SAFE/podww000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podww000_SC_SAFE/test.desc new file mode 100644 index 00000000000..75b09a760fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podww000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_TSO_ALL/podww000.c b/regression/goto-instrument-wmm-core/ppc_podww000_TSO_ALL/podww000.c new file mode 100644 index 00000000000..ac1383d256c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_TSO_ALL/podww000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podww000_TSO_ALL/test.desc new file mode 100644 index 00000000000..42309d3e980 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +podww000.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_TSO_OPC/podww000.c b/regression/goto-instrument-wmm-core/ppc_podww000_TSO_OPC/podww000.c new file mode 100644 index 00000000000..ac1383d256c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_TSO_OPC/podww000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podww000_TSO_OPC/test.desc new file mode 100644 index 00000000000..4cf010970c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +podww000.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_TSO_OPT/podww000.c b/regression/goto-instrument-wmm-core/ppc_podww000_TSO_OPT/podww000.c new file mode 100644 index 00000000000..ac1383d256c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_TSO_OPT/podww000.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podww000_TSO_OPT/test.desc new file mode 100644 index 00000000000..7f58ec89a9a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podww000.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_CAV11_ERROR/podww001.c b/regression/goto-instrument-wmm-core/ppc_podww001_CAV11_ERROR/podww001.c new file mode 100644 index 00000000000..5d8aecdaf63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_CAV11_ERROR/podww001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_podww001_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..d52168fa9cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podww001.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_POWER_ALL/podww001.c b/regression/goto-instrument-wmm-core/ppc_podww001_POWER_ALL/podww001.c new file mode 100644 index 00000000000..5d8aecdaf63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_POWER_ALL/podww001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podww001_POWER_ALL/test.desc new file mode 100644 index 00000000000..1eeb3f6aaaf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podww001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_POWER_OPC/podww001.c b/regression/goto-instrument-wmm-core/ppc_podww001_POWER_OPC/podww001.c new file mode 100644 index 00000000000..5d8aecdaf63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_POWER_OPC/podww001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podww001_POWER_OPC/test.desc new file mode 100644 index 00000000000..59ca56a8698 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podww001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_POWER_OPT/podww001.c b/regression/goto-instrument-wmm-core/ppc_podww001_POWER_OPT/podww001.c new file mode 100644 index 00000000000..5d8aecdaf63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_POWER_OPT/podww001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podww001_POWER_OPT/test.desc new file mode 100644 index 00000000000..5f1eee18c1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podww001.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_PSO_ALL/podww001.c b/regression/goto-instrument-wmm-core/ppc_podww001_PSO_ALL/podww001.c new file mode 100644 index 00000000000..5d8aecdaf63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_PSO_ALL/podww001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podww001_PSO_ALL/test.desc new file mode 100644 index 00000000000..43b515a080a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podww001.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_PSO_OPC/podww001.c b/regression/goto-instrument-wmm-core/ppc_podww001_PSO_OPC/podww001.c new file mode 100644 index 00000000000..5d8aecdaf63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_PSO_OPC/podww001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podww001_PSO_OPC/test.desc new file mode 100644 index 00000000000..297acc50ae0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podww001.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_PSO_OPT/podww001.c b/regression/goto-instrument-wmm-core/ppc_podww001_PSO_OPT/podww001.c new file mode 100644 index 00000000000..5d8aecdaf63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_PSO_OPT/podww001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podww001_PSO_OPT/test.desc new file mode 100644 index 00000000000..da04bb61aca --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podww001.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_RMO_ALL/podww001.c b/regression/goto-instrument-wmm-core/ppc_podww001_RMO_ALL/podww001.c new file mode 100644 index 00000000000..5d8aecdaf63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_RMO_ALL/podww001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podww001_RMO_ALL/test.desc new file mode 100644 index 00000000000..0a637646889 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podww001.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_RMO_OPC/podww001.c b/regression/goto-instrument-wmm-core/ppc_podww001_RMO_OPC/podww001.c new file mode 100644 index 00000000000..5d8aecdaf63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_RMO_OPC/podww001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podww001_RMO_OPC/test.desc new file mode 100644 index 00000000000..198d8efd99e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podww001.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_RMO_OPT/podww001.c b/regression/goto-instrument-wmm-core/ppc_podww001_RMO_OPT/podww001.c new file mode 100644 index 00000000000..5d8aecdaf63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_RMO_OPT/podww001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podww001_RMO_OPT/test.desc new file mode 100644 index 00000000000..50cf9ede087 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podww001.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_SC_SAFE/podww001.c b/regression/goto-instrument-wmm-core/ppc_podww001_SC_SAFE/podww001.c new file mode 100644 index 00000000000..5d8aecdaf63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_SC_SAFE/podww001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_podww001_SC_SAFE/test.desc new file mode 100644 index 00000000000..51a21f801bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podww001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_TSO_ALL/podww001.c b/regression/goto-instrument-wmm-core/ppc_podww001_TSO_ALL/podww001.c new file mode 100644 index 00000000000..5d8aecdaf63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_TSO_ALL/podww001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_podww001_TSO_ALL/test.desc new file mode 100644 index 00000000000..4a901286346 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +podww001.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_TSO_OPC/podww001.c b/regression/goto-instrument-wmm-core/ppc_podww001_TSO_OPC/podww001.c new file mode 100644 index 00000000000..5d8aecdaf63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_TSO_OPC/podww001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_podww001_TSO_OPC/test.desc new file mode 100644 index 00000000000..a620a6ae756 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +podww001.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_TSO_OPT/podww001.c b/regression/goto-instrument-wmm-core/ppc_podww001_TSO_OPT/podww001.c new file mode 100644 index 00000000000..5d8aecdaf63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_TSO_OPT/podww001.c @@ -0,0 +1,73 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_podww001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_podww001_TSO_OPT/test.desc new file mode 100644 index 00000000000..81c3b5f7458 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_podww001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podww001.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_CAV11_SAFE/posrr000.c b/regression/goto-instrument-wmm-core/ppc_posrr000_CAV11_SAFE/posrr000.c new file mode 100644 index 00000000000..43dae58e9b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_CAV11_SAFE/posrr000.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + __unbuffered_p1_r7 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr000_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..c1fbf177261 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr000.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_ALL/posrr000.c b/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_ALL/posrr000.c new file mode 100644 index 00000000000..43dae58e9b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_ALL/posrr000.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + __unbuffered_p1_r7 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_ALL/test.desc new file mode 100644 index 00000000000..06930abb282 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +posrr000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_OPC/posrr000.c b/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_OPC/posrr000.c new file mode 100644 index 00000000000..43dae58e9b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_OPC/posrr000.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + __unbuffered_p1_r7 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_OPC/test.desc new file mode 100644 index 00000000000..e6597b594e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +posrr000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_OPT/posrr000.c b/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_OPT/posrr000.c new file mode 100644 index 00000000000..43dae58e9b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_OPT/posrr000.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + __unbuffered_p1_r7 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_OPT/test.desc new file mode 100644 index 00000000000..daca903c10f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +posrr000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_ALL/posrr000.c b/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_ALL/posrr000.c new file mode 100644 index 00000000000..43dae58e9b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_ALL/posrr000.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + __unbuffered_p1_r7 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_ALL/test.desc new file mode 100644 index 00000000000..7bbc3a73737 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr000.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_OPC/posrr000.c b/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_OPC/posrr000.c new file mode 100644 index 00000000000..43dae58e9b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_OPC/posrr000.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + __unbuffered_p1_r7 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_OPC/test.desc new file mode 100644 index 00000000000..a63c7fd4cf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr000.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_OPT/posrr000.c b/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_OPT/posrr000.c new file mode 100644 index 00000000000..43dae58e9b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_OPT/posrr000.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + __unbuffered_p1_r7 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_OPT/test.desc new file mode 100644 index 00000000000..2e0c0d34b36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +posrr000.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_ALL/posrr000.c b/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_ALL/posrr000.c new file mode 100644 index 00000000000..43dae58e9b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_ALL/posrr000.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + __unbuffered_p1_r7 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_ALL/test.desc new file mode 100644 index 00000000000..74269971aae --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr000.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_OPC/posrr000.c b/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_OPC/posrr000.c new file mode 100644 index 00000000000..43dae58e9b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_OPC/posrr000.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + __unbuffered_p1_r7 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_OPC/test.desc new file mode 100644 index 00000000000..e15dd01cadc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +posrr000.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_OPT/posrr000.c b/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_OPT/posrr000.c new file mode 100644 index 00000000000..43dae58e9b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_OPT/posrr000.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + __unbuffered_p1_r7 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_OPT/test.desc new file mode 100644 index 00000000000..a95fa6c03cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +posrr000.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_SC_SAFE/posrr000.c b/regression/goto-instrument-wmm-core/ppc_posrr000_SC_SAFE/posrr000.c new file mode 100644 index 00000000000..43dae58e9b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_SC_SAFE/posrr000.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + __unbuffered_p1_r7 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr000_SC_SAFE/test.desc new file mode 100644 index 00000000000..730d90739c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +posrr000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_ALL/posrr000.c b/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_ALL/posrr000.c new file mode 100644 index 00000000000..43dae58e9b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_ALL/posrr000.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + __unbuffered_p1_r7 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_ALL/test.desc new file mode 100644 index 00000000000..7d42174f327 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr000.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_OPC/posrr000.c b/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_OPC/posrr000.c new file mode 100644 index 00000000000..43dae58e9b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_OPC/posrr000.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + __unbuffered_p1_r7 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_OPC/test.desc new file mode 100644 index 00000000000..cee02bd2fa8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr000.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_OPT/posrr000.c b/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_OPT/posrr000.c new file mode 100644 index 00000000000..43dae58e9b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_OPT/posrr000.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int __unbuffered_p1_r7 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = x; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&y + __unbuffered_p1_r4); + __unbuffered_p1_r7 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r7 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_OPT/test.desc new file mode 100644 index 00000000000..309538d3689 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +posrr000.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_CAV11_SAFE/posrr001.c b/regression/goto-instrument-wmm-core/ppc_posrr001_CAV11_SAFE/posrr001.c new file mode 100644 index 00000000000..ea414e2127e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_CAV11_SAFE/posrr001.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr001_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..049d087d966 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr001.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_ALL/posrr001.c b/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_ALL/posrr001.c new file mode 100644 index 00000000000..ea414e2127e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_ALL/posrr001.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_ALL/test.desc new file mode 100644 index 00000000000..bfa8309ffe1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +posrr001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_OPC/posrr001.c b/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_OPC/posrr001.c new file mode 100644 index 00000000000..ea414e2127e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_OPC/posrr001.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_OPC/test.desc new file mode 100644 index 00000000000..ee95e25db2b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +posrr001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_OPT/posrr001.c b/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_OPT/posrr001.c new file mode 100644 index 00000000000..ea414e2127e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_OPT/posrr001.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_OPT/test.desc new file mode 100644 index 00000000000..f1420a6695f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +posrr001.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_ALL/posrr001.c b/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_ALL/posrr001.c new file mode 100644 index 00000000000..ea414e2127e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_ALL/posrr001.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_ALL/test.desc new file mode 100644 index 00000000000..47095ad063b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr001.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_OPC/posrr001.c b/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_OPC/posrr001.c new file mode 100644 index 00000000000..ea414e2127e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_OPC/posrr001.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_OPC/test.desc new file mode 100644 index 00000000000..7fcc160eb25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr001.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_OPT/posrr001.c b/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_OPT/posrr001.c new file mode 100644 index 00000000000..ea414e2127e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_OPT/posrr001.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_OPT/test.desc new file mode 100644 index 00000000000..c47d06e1559 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +posrr001.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_ALL/posrr001.c b/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_ALL/posrr001.c new file mode 100644 index 00000000000..ea414e2127e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_ALL/posrr001.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_ALL/test.desc new file mode 100644 index 00000000000..f8c1afc8b00 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr001.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_OPC/posrr001.c b/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_OPC/posrr001.c new file mode 100644 index 00000000000..ea414e2127e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_OPC/posrr001.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_OPC/test.desc new file mode 100644 index 00000000000..f5307a7c79e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr001.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_OPT/posrr001.c b/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_OPT/posrr001.c new file mode 100644 index 00000000000..ea414e2127e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_OPT/posrr001.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_OPT/test.desc new file mode 100644 index 00000000000..b80ba6cda6c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +posrr001.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_SC_SAFE/posrr001.c b/regression/goto-instrument-wmm-core/ppc_posrr001_SC_SAFE/posrr001.c new file mode 100644 index 00000000000..ea414e2127e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_SC_SAFE/posrr001.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr001_SC_SAFE/test.desc new file mode 100644 index 00000000000..1c05515dc2b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_ALL/posrr001.c b/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_ALL/posrr001.c new file mode 100644 index 00000000000..ea414e2127e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_ALL/posrr001.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_ALL/test.desc new file mode 100644 index 00000000000..08bc3b03189 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr001.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_OPC/posrr001.c b/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_OPC/posrr001.c new file mode 100644 index 00000000000..ea414e2127e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_OPC/posrr001.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_OPC/test.desc new file mode 100644 index 00000000000..ef3d579fb45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr001.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_OPT/posrr001.c b/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_OPT/posrr001.c new file mode 100644 index 00000000000..ea414e2127e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_OPT/posrr001.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + __unbuffered_p1_r6 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_OPT/test.desc new file mode 100644 index 00000000000..b8421f3767b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +posrr001.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_CAV11_SAFE/posrr002.c b/regression/goto-instrument-wmm-core/ppc_posrr002_CAV11_SAFE/posrr002.c new file mode 100644 index 00000000000..4b25cefbb68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_CAV11_SAFE/posrr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&z + __unbuffered_p1_r3); + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = *(&x + __unbuffered_p1_r7); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr002_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..84c3b9eea73 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr002.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_ALL/posrr002.c b/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_ALL/posrr002.c new file mode 100644 index 00000000000..4b25cefbb68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_ALL/posrr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&z + __unbuffered_p1_r3); + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = *(&x + __unbuffered_p1_r7); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_ALL/test.desc new file mode 100644 index 00000000000..1b3da7963c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr002.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_OPC/posrr002.c b/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_OPC/posrr002.c new file mode 100644 index 00000000000..4b25cefbb68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_OPC/posrr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&z + __unbuffered_p1_r3); + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = *(&x + __unbuffered_p1_r7); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_OPC/test.desc new file mode 100644 index 00000000000..4004f4d39a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr002.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_OPT/posrr002.c b/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_OPT/posrr002.c new file mode 100644 index 00000000000..4b25cefbb68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_OPT/posrr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&z + __unbuffered_p1_r3); + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = *(&x + __unbuffered_p1_r7); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_OPT/test.desc new file mode 100644 index 00000000000..6b40e0db172 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +posrr002.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_ALL/posrr002.c b/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_ALL/posrr002.c new file mode 100644 index 00000000000..4b25cefbb68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_ALL/posrr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&z + __unbuffered_p1_r3); + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = *(&x + __unbuffered_p1_r7); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_ALL/test.desc new file mode 100644 index 00000000000..76ed92d4cf6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr002.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_OPC/posrr002.c b/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_OPC/posrr002.c new file mode 100644 index 00000000000..4b25cefbb68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_OPC/posrr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&z + __unbuffered_p1_r3); + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = *(&x + __unbuffered_p1_r7); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_OPC/test.desc new file mode 100644 index 00000000000..67aed81248b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr002.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_OPT/posrr002.c b/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_OPT/posrr002.c new file mode 100644 index 00000000000..4b25cefbb68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_OPT/posrr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&z + __unbuffered_p1_r3); + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = *(&x + __unbuffered_p1_r7); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_OPT/test.desc new file mode 100644 index 00000000000..d4989a18aa6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +posrr002.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_ALL/posrr002.c b/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_ALL/posrr002.c new file mode 100644 index 00000000000..4b25cefbb68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_ALL/posrr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&z + __unbuffered_p1_r3); + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = *(&x + __unbuffered_p1_r7); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_ALL/test.desc new file mode 100644 index 00000000000..e33c6fb5d99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr002.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_OPC/posrr002.c b/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_OPC/posrr002.c new file mode 100644 index 00000000000..4b25cefbb68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_OPC/posrr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&z + __unbuffered_p1_r3); + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = *(&x + __unbuffered_p1_r7); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_OPC/test.desc new file mode 100644 index 00000000000..910af456f1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr002.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_OPT/posrr002.c b/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_OPT/posrr002.c new file mode 100644 index 00000000000..4b25cefbb68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_OPT/posrr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&z + __unbuffered_p1_r3); + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = *(&x + __unbuffered_p1_r7); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_OPT/test.desc new file mode 100644 index 00000000000..a88795f3d50 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +posrr002.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_SC_SAFE/posrr002.c b/regression/goto-instrument-wmm-core/ppc_posrr002_SC_SAFE/posrr002.c new file mode 100644 index 00000000000..4b25cefbb68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_SC_SAFE/posrr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&z + __unbuffered_p1_r3); + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = *(&x + __unbuffered_p1_r7); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr002_SC_SAFE/test.desc new file mode 100644 index 00000000000..fa7fd38d03e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr002.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_ALL/posrr002.c b/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_ALL/posrr002.c new file mode 100644 index 00000000000..4b25cefbb68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_ALL/posrr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&z + __unbuffered_p1_r3); + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = *(&x + __unbuffered_p1_r7); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_ALL/test.desc new file mode 100644 index 00000000000..90d74d3be29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr002.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_OPC/posrr002.c b/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_OPC/posrr002.c new file mode 100644 index 00000000000..4b25cefbb68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_OPC/posrr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&z + __unbuffered_p1_r3); + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = *(&x + __unbuffered_p1_r7); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_OPC/test.desc new file mode 100644 index 00000000000..4c81c4608ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr002.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_OPT/posrr002.c b/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_OPT/posrr002.c new file mode 100644 index 00000000000..4b25cefbb68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_OPT/posrr002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&z + __unbuffered_p1_r3); + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = *(&x + __unbuffered_p1_r7); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r8 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_OPT/test.desc new file mode 100644 index 00000000000..b19cf6b785c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr002_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +posrr002.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_CAV11_SAFE/posrr003.c b/regression/goto-instrument-wmm-core/ppc_posrr003_CAV11_SAFE/posrr003.c new file mode 100644 index 00000000000..3e3eebf7425 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_CAV11_SAFE/posrr003.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr003_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..f9b7650b0a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr003.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_ALL/posrr003.c b/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_ALL/posrr003.c new file mode 100644 index 00000000000..3e3eebf7425 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_ALL/posrr003.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_ALL/test.desc new file mode 100644 index 00000000000..4a2850f470f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +posrr003.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_OPC/posrr003.c b/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_OPC/posrr003.c new file mode 100644 index 00000000000..3e3eebf7425 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_OPC/posrr003.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_OPC/test.desc new file mode 100644 index 00000000000..6fa3b70434f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +posrr003.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_OPT/posrr003.c b/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_OPT/posrr003.c new file mode 100644 index 00000000000..3e3eebf7425 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_OPT/posrr003.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_OPT/test.desc new file mode 100644 index 00000000000..1e90819f15c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +posrr003.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_ALL/posrr003.c b/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_ALL/posrr003.c new file mode 100644 index 00000000000..3e3eebf7425 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_ALL/posrr003.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_ALL/test.desc new file mode 100644 index 00000000000..a7d87832f56 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr003.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_OPC/posrr003.c b/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_OPC/posrr003.c new file mode 100644 index 00000000000..3e3eebf7425 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_OPC/posrr003.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_OPC/test.desc new file mode 100644 index 00000000000..82810e50a58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr003.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_OPT/posrr003.c b/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_OPT/posrr003.c new file mode 100644 index 00000000000..3e3eebf7425 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_OPT/posrr003.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_OPT/test.desc new file mode 100644 index 00000000000..435ed09abb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +posrr003.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_ALL/posrr003.c b/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_ALL/posrr003.c new file mode 100644 index 00000000000..3e3eebf7425 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_ALL/posrr003.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_ALL/test.desc new file mode 100644 index 00000000000..4014b8e9b24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr003.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_OPC/posrr003.c b/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_OPC/posrr003.c new file mode 100644 index 00000000000..3e3eebf7425 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_OPC/posrr003.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_OPC/test.desc new file mode 100644 index 00000000000..32003066dc3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr003.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_OPT/posrr003.c b/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_OPT/posrr003.c new file mode 100644 index 00000000000..3e3eebf7425 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_OPT/posrr003.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_OPT/test.desc new file mode 100644 index 00000000000..e70e89a53e1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +posrr003.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_SC_SAFE/posrr003.c b/regression/goto-instrument-wmm-core/ppc_posrr003_SC_SAFE/posrr003.c new file mode 100644 index 00000000000..3e3eebf7425 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_SC_SAFE/posrr003.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr003_SC_SAFE/test.desc new file mode 100644 index 00000000000..61743df6844 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr003.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_ALL/posrr003.c b/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_ALL/posrr003.c new file mode 100644 index 00000000000..3e3eebf7425 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_ALL/posrr003.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_ALL/test.desc new file mode 100644 index 00000000000..b74bab7bb44 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr003.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_OPC/posrr003.c b/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_OPC/posrr003.c new file mode 100644 index 00000000000..3e3eebf7425 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_OPC/posrr003.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_OPC/test.desc new file mode 100644 index 00000000000..51be78ac67b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr003.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_OPT/posrr003.c b/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_OPT/posrr003.c new file mode 100644 index 00000000000..3e3eebf7425 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_OPT/posrr003.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_OPT/test.desc new file mode 100644 index 00000000000..1fb8f2d255d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr003_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +posrr003.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_CAV11_ERROR/posrr004.c b/regression/goto-instrument-wmm-core/ppc_posrr004_CAV11_ERROR/posrr004.c new file mode 100644 index 00000000000..d7bd4302782 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_CAV11_ERROR/posrr004.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr004_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..ebfa45d9682 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr004.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_POWER_ALL/posrr004.c b/regression/goto-instrument-wmm-core/ppc_posrr004_POWER_ALL/posrr004.c new file mode 100644 index 00000000000..d7bd4302782 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_POWER_ALL/posrr004.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr004_POWER_ALL/test.desc new file mode 100644 index 00000000000..c1e6f6bca7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr004.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_POWER_OPC/posrr004.c b/regression/goto-instrument-wmm-core/ppc_posrr004_POWER_OPC/posrr004.c new file mode 100644 index 00000000000..d7bd4302782 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_POWER_OPC/posrr004.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr004_POWER_OPC/test.desc new file mode 100644 index 00000000000..c3dea569630 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr004.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr004_POWER_OPT/test.desc index 31099299b74..668ca3690cf 100644 --- a/regression/goto-instrument-wmm-core/ppc_posrr004_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk posrr004.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_ALL/posrr004.c b/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_ALL/posrr004.c new file mode 100644 index 00000000000..d7bd4302782 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_ALL/posrr004.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_ALL/test.desc new file mode 100644 index 00000000000..2410c29b47a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr004.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_OPC/posrr004.c b/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_OPC/posrr004.c new file mode 100644 index 00000000000..d7bd4302782 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_OPC/posrr004.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_OPC/test.desc new file mode 100644 index 00000000000..9eeee457ef2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr004.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_OPT/posrr004.c b/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_OPT/posrr004.c new file mode 100644 index 00000000000..d7bd4302782 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_OPT/posrr004.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_OPT/test.desc new file mode 100644 index 00000000000..efa5c58170d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +posrr004.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_ALL/posrr004.c b/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_ALL/posrr004.c new file mode 100644 index 00000000000..d7bd4302782 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_ALL/posrr004.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_ALL/test.desc new file mode 100644 index 00000000000..01210d30d56 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr004.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_OPC/posrr004.c b/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_OPC/posrr004.c new file mode 100644 index 00000000000..d7bd4302782 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_OPC/posrr004.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_OPC/test.desc new file mode 100644 index 00000000000..06ddb32f9fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr004.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_OPT/posrr004.c b/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_OPT/posrr004.c new file mode 100644 index 00000000000..d7bd4302782 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_OPT/posrr004.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_OPT/test.desc new file mode 100644 index 00000000000..303c1c9ab00 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +posrr004.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_SC_SAFE/posrr004.c b/regression/goto-instrument-wmm-core/ppc_posrr004_SC_SAFE/posrr004.c new file mode 100644 index 00000000000..d7bd4302782 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_SC_SAFE/posrr004.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr004_SC_SAFE/test.desc new file mode 100644 index 00000000000..dca84a47b42 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr004.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_ALL/posrr004.c b/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_ALL/posrr004.c new file mode 100644 index 00000000000..d7bd4302782 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_ALL/posrr004.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_ALL/test.desc new file mode 100644 index 00000000000..4f8cef88874 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr004.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_OPC/posrr004.c b/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_OPC/posrr004.c new file mode 100644 index 00000000000..d7bd4302782 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_OPC/posrr004.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_OPC/test.desc new file mode 100644 index 00000000000..5ef3f550f9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +posrr004.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_OPT/posrr004.c b/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_OPT/posrr004.c new file mode 100644 index 00000000000..d7bd4302782 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_OPT/posrr004.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_OPT/test.desc new file mode 100644 index 00000000000..13bdf4f815f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_posrr004_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +posrr004.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_CAV11_SAFE/rfe000.c b/regression/goto-instrument-wmm-core/ppc_rfe000_CAV11_SAFE/rfe000.c new file mode 100644 index 00000000000..fd5d9809639 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_CAV11_SAFE/rfe000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe000_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..6ba240f3acd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe000.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_POWER_ALL/rfe000.c b/regression/goto-instrument-wmm-core/ppc_rfe000_POWER_ALL/rfe000.c new file mode 100644 index 00000000000..fd5d9809639 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_POWER_ALL/rfe000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe000_POWER_ALL/test.desc new file mode 100644 index 00000000000..e97a36c85a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe000.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_POWER_OPC/rfe000.c b/regression/goto-instrument-wmm-core/ppc_rfe000_POWER_OPC/rfe000.c new file mode 100644 index 00000000000..fd5d9809639 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_POWER_OPC/rfe000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe000_POWER_OPC/test.desc new file mode 100644 index 00000000000..3d8a27c072b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe000.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe000_POWER_OPT/test.desc index 12272137892..275b95d17cf 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe000_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk rfe000.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_ALL/rfe000.c b/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_ALL/rfe000.c new file mode 100644 index 00000000000..fd5d9809639 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_ALL/rfe000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_ALL/test.desc new file mode 100644 index 00000000000..1e32fec510b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe000.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_OPC/rfe000.c b/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_OPC/rfe000.c new file mode 100644 index 00000000000..fd5d9809639 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_OPC/rfe000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_OPC/test.desc new file mode 100644 index 00000000000..83e3f24f9f2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe000.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_OPT/rfe000.c b/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_OPT/rfe000.c new file mode 100644 index 00000000000..fd5d9809639 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_OPT/rfe000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_OPT/test.desc new file mode 100644 index 00000000000..136da5a4db6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe000.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_ALL/rfe000.c b/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_ALL/rfe000.c new file mode 100644 index 00000000000..fd5d9809639 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_ALL/rfe000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_ALL/test.desc new file mode 100644 index 00000000000..f8569778f5e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe000.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_OPC/rfe000.c b/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_OPC/rfe000.c new file mode 100644 index 00000000000..fd5d9809639 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_OPC/rfe000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_OPC/test.desc new file mode 100644 index 00000000000..536a10c5a30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe000.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_OPT/rfe000.c b/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_OPT/rfe000.c new file mode 100644 index 00000000000..fd5d9809639 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_OPT/rfe000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_OPT/test.desc new file mode 100644 index 00000000000..c74adba2343 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe000.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_SC_SAFE/rfe000.c b/regression/goto-instrument-wmm-core/ppc_rfe000_SC_SAFE/rfe000.c new file mode 100644 index 00000000000..fd5d9809639 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_SC_SAFE/rfe000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe000_SC_SAFE/test.desc new file mode 100644 index 00000000000..cc4803f89e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_ALL/rfe000.c b/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_ALL/rfe000.c new file mode 100644 index 00000000000..fd5d9809639 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_ALL/rfe000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_ALL/test.desc new file mode 100644 index 00000000000..3f4fda40f05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe000.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_OPC/rfe000.c b/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_OPC/rfe000.c new file mode 100644 index 00000000000..fd5d9809639 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_OPC/rfe000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_OPC/test.desc new file mode 100644 index 00000000000..e42202ea97d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe000.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_OPT/rfe000.c b/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_OPT/rfe000.c new file mode 100644 index 00000000000..fd5d9809639 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_OPT/rfe000.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_OPT/test.desc new file mode 100644 index 00000000000..823e5c66ed9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe000.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_CAV11_SAFE/rfe001.c b/regression/goto-instrument-wmm-core/ppc_rfe001_CAV11_SAFE/rfe001.c new file mode 100644 index 00000000000..5ae006485f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_CAV11_SAFE/rfe001.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe001_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..45a7da8fb78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe001.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_POWER_ALL/rfe001.c b/regression/goto-instrument-wmm-core/ppc_rfe001_POWER_ALL/rfe001.c new file mode 100644 index 00000000000..5ae006485f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_POWER_ALL/rfe001.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe001_POWER_ALL/test.desc new file mode 100644 index 00000000000..cd660b48bfe --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe001.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_POWER_OPC/rfe001.c b/regression/goto-instrument-wmm-core/ppc_rfe001_POWER_OPC/rfe001.c new file mode 100644 index 00000000000..5ae006485f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_POWER_OPC/rfe001.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe001_POWER_OPC/test.desc new file mode 100644 index 00000000000..b82c26d09ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe001.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe001_POWER_OPT/test.desc index 029d08be22d..8420119f151 100644 --- a/regression/goto-instrument-wmm-core/ppc_rfe001_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk rfe001.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_ALL/rfe001.c b/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_ALL/rfe001.c new file mode 100644 index 00000000000..5ae006485f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_ALL/rfe001.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_ALL/test.desc new file mode 100644 index 00000000000..3850b025cea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe001.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_OPC/rfe001.c b/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_OPC/rfe001.c new file mode 100644 index 00000000000..5ae006485f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_OPC/rfe001.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_OPC/test.desc new file mode 100644 index 00000000000..f022763b476 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe001.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_OPT/rfe001.c b/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_OPT/rfe001.c new file mode 100644 index 00000000000..5ae006485f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_OPT/rfe001.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_OPT/test.desc new file mode 100644 index 00000000000..8f9ac9a8836 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe001.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_ALL/rfe001.c b/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_ALL/rfe001.c new file mode 100644 index 00000000000..5ae006485f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_ALL/rfe001.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_ALL/test.desc new file mode 100644 index 00000000000..b2f39a7fe9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe001.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_OPC/rfe001.c b/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_OPC/rfe001.c new file mode 100644 index 00000000000..5ae006485f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_OPC/rfe001.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_OPC/test.desc new file mode 100644 index 00000000000..2f328f667ca --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe001.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_OPT/rfe001.c b/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_OPT/rfe001.c new file mode 100644 index 00000000000..5ae006485f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_OPT/rfe001.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_OPT/test.desc new file mode 100644 index 00000000000..32e0942dcb5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe001.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_SC_SAFE/rfe001.c b/regression/goto-instrument-wmm-core/ppc_rfe001_SC_SAFE/rfe001.c new file mode 100644 index 00000000000..5ae006485f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_SC_SAFE/rfe001.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe001_SC_SAFE/test.desc new file mode 100644 index 00000000000..a7211ee5f11 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_ALL/rfe001.c b/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_ALL/rfe001.c new file mode 100644 index 00000000000..5ae006485f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_ALL/rfe001.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_ALL/test.desc new file mode 100644 index 00000000000..2cf12d3f787 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe001.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_OPC/rfe001.c b/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_OPC/rfe001.c new file mode 100644 index 00000000000..5ae006485f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_OPC/rfe001.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_OPC/test.desc new file mode 100644 index 00000000000..380fafc01d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe001.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_OPT/rfe001.c b/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_OPT/rfe001.c new file mode 100644 index 00000000000..5ae006485f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_OPT/rfe001.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_OPT/test.desc new file mode 100644 index 00000000000..064efa7c32f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe001.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_CAV11_ERROR/rfe002.c b/regression/goto-instrument-wmm-core/ppc_rfe002_CAV11_ERROR/rfe002.c new file mode 100644 index 00000000000..dc09f2a0a79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_CAV11_ERROR/rfe002.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe002_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..ca00cfe82dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe002.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_ALL/rfe002.c b/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_ALL/rfe002.c new file mode 100644 index 00000000000..dc09f2a0a79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_ALL/rfe002.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_ALL/test.desc new file mode 100644 index 00000000000..67757ffca2f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe002.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_OPC/rfe002.c b/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_OPC/rfe002.c new file mode 100644 index 00000000000..dc09f2a0a79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_OPC/rfe002.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_OPC/test.desc new file mode 100644 index 00000000000..947f8d45a67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe002.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_OPT/rfe002.c b/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_OPT/rfe002.c new file mode 100644 index 00000000000..dc09f2a0a79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_OPT/rfe002.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_OPT/test.desc new file mode 100644 index 00000000000..3e883b0853b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe002.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_ALL/rfe002.c b/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_ALL/rfe002.c new file mode 100644 index 00000000000..dc09f2a0a79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_ALL/rfe002.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_ALL/test.desc new file mode 100644 index 00000000000..a17424af4fe --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe002.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_OPC/rfe002.c b/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_OPC/rfe002.c new file mode 100644 index 00000000000..dc09f2a0a79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_OPC/rfe002.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_OPC/test.desc new file mode 100644 index 00000000000..0c8b4095b53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe002.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_OPT/rfe002.c b/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_OPT/rfe002.c new file mode 100644 index 00000000000..dc09f2a0a79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_OPT/rfe002.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_OPT/test.desc new file mode 100644 index 00000000000..5e0ea135db0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe002.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_ALL/rfe002.c b/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_ALL/rfe002.c new file mode 100644 index 00000000000..dc09f2a0a79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_ALL/rfe002.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_ALL/test.desc new file mode 100644 index 00000000000..638cd3c3ad4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe002.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_OPC/rfe002.c b/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_OPC/rfe002.c new file mode 100644 index 00000000000..dc09f2a0a79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_OPC/rfe002.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_OPC/test.desc new file mode 100644 index 00000000000..850b5aaa462 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe002.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_OPT/rfe002.c b/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_OPT/rfe002.c new file mode 100644 index 00000000000..dc09f2a0a79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_OPT/rfe002.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_OPT/test.desc new file mode 100644 index 00000000000..a1a08fbb261 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe002.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_SC_SAFE/rfe002.c b/regression/goto-instrument-wmm-core/ppc_rfe002_SC_SAFE/rfe002.c new file mode 100644 index 00000000000..dc09f2a0a79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_SC_SAFE/rfe002.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe002_SC_SAFE/test.desc new file mode 100644 index 00000000000..eea93231ece --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe002.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_ALL/rfe002.c b/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_ALL/rfe002.c new file mode 100644 index 00000000000..dc09f2a0a79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_ALL/rfe002.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_ALL/test.desc new file mode 100644 index 00000000000..d679cf9489a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe002.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_OPC/rfe002.c b/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_OPC/rfe002.c new file mode 100644 index 00000000000..dc09f2a0a79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_OPC/rfe002.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_OPC/test.desc new file mode 100644 index 00000000000..ff15392bcec --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe002.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_OPT/rfe002.c b/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_OPT/rfe002.c new file mode 100644 index 00000000000..dc09f2a0a79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_OPT/rfe002.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_OPT/test.desc new file mode 100644 index 00000000000..5c287f876e1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe002_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe002.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_CAV11_SAFE/rfe003.c b/regression/goto-instrument-wmm-core/ppc_rfe003_CAV11_SAFE/rfe003.c new file mode 100644 index 00000000000..e2702aad4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_CAV11_SAFE/rfe003.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe003_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..48521792628 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe003.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_ALL/rfe003.c b/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_ALL/rfe003.c new file mode 100644 index 00000000000..e2702aad4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_ALL/rfe003.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_ALL/test.desc new file mode 100644 index 00000000000..e6000af8f12 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe003.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_OPC/rfe003.c b/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_OPC/rfe003.c new file mode 100644 index 00000000000..e2702aad4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_OPC/rfe003.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_OPC/test.desc new file mode 100644 index 00000000000..33994b8d6ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe003.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_OPT/rfe003.c b/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_OPT/rfe003.c new file mode 100644 index 00000000000..e2702aad4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_OPT/rfe003.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_OPT/test.desc new file mode 100644 index 00000000000..8c3deb4ed9c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe003.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_ALL/rfe003.c b/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_ALL/rfe003.c new file mode 100644 index 00000000000..e2702aad4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_ALL/rfe003.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_ALL/test.desc new file mode 100644 index 00000000000..6674116e7fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe003.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_OPC/rfe003.c b/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_OPC/rfe003.c new file mode 100644 index 00000000000..e2702aad4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_OPC/rfe003.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_OPC/test.desc new file mode 100644 index 00000000000..aa19e0d6e5b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe003.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_OPT/rfe003.c b/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_OPT/rfe003.c new file mode 100644 index 00000000000..e2702aad4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_OPT/rfe003.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_OPT/test.desc new file mode 100644 index 00000000000..266231b6fe2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe003.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_ALL/rfe003.c b/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_ALL/rfe003.c new file mode 100644 index 00000000000..e2702aad4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_ALL/rfe003.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_ALL/test.desc new file mode 100644 index 00000000000..e7673a1d335 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe003.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_OPC/rfe003.c b/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_OPC/rfe003.c new file mode 100644 index 00000000000..e2702aad4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_OPC/rfe003.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_OPC/test.desc new file mode 100644 index 00000000000..df89517093c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe003.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_OPT/rfe003.c b/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_OPT/rfe003.c new file mode 100644 index 00000000000..e2702aad4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_OPT/rfe003.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_OPT/test.desc new file mode 100644 index 00000000000..a73da45388d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe003.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_SC_SAFE/rfe003.c b/regression/goto-instrument-wmm-core/ppc_rfe003_SC_SAFE/rfe003.c new file mode 100644 index 00000000000..e2702aad4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_SC_SAFE/rfe003.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe003_SC_SAFE/test.desc new file mode 100644 index 00000000000..10f40f46476 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe003.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_ALL/rfe003.c b/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_ALL/rfe003.c new file mode 100644 index 00000000000..e2702aad4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_ALL/rfe003.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_ALL/test.desc new file mode 100644 index 00000000000..1fbd5449604 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe003.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_OPC/rfe003.c b/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_OPC/rfe003.c new file mode 100644 index 00000000000..e2702aad4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_OPC/rfe003.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_OPC/test.desc new file mode 100644 index 00000000000..44856e87e18 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe003.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_OPT/rfe003.c b/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_OPT/rfe003.c new file mode 100644 index 00000000000..e2702aad4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_OPT/rfe003.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_OPT/test.desc new file mode 100644 index 00000000000..4c73237d343 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe003_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe003.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_CAV11_ERROR/rfe004.c b/regression/goto-instrument-wmm-core/ppc_rfe004_CAV11_ERROR/rfe004.c new file mode 100644 index 00000000000..9683f7c7d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_CAV11_ERROR/rfe004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe004_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..2c08cb7dcb2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe004.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_ALL/rfe004.c b/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_ALL/rfe004.c new file mode 100644 index 00000000000..9683f7c7d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_ALL/rfe004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_ALL/test.desc new file mode 100644 index 00000000000..6f9e1d07c77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe004.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_OPC/rfe004.c b/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_OPC/rfe004.c new file mode 100644 index 00000000000..9683f7c7d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_OPC/rfe004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_OPC/test.desc new file mode 100644 index 00000000000..db57bb0640e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe004.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_OPT/rfe004.c b/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_OPT/rfe004.c new file mode 100644 index 00000000000..9683f7c7d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_OPT/rfe004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_OPT/test.desc new file mode 100644 index 00000000000..bf5f923b22d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe004.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_ALL/rfe004.c b/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_ALL/rfe004.c new file mode 100644 index 00000000000..9683f7c7d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_ALL/rfe004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_ALL/test.desc new file mode 100644 index 00000000000..c0709e7041b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe004.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_OPC/rfe004.c b/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_OPC/rfe004.c new file mode 100644 index 00000000000..9683f7c7d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_OPC/rfe004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_OPC/test.desc new file mode 100644 index 00000000000..1bc18946313 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe004.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_OPT/rfe004.c b/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_OPT/rfe004.c new file mode 100644 index 00000000000..9683f7c7d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_OPT/rfe004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_OPT/test.desc new file mode 100644 index 00000000000..3018f41d553 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe004.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_ALL/rfe004.c b/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_ALL/rfe004.c new file mode 100644 index 00000000000..9683f7c7d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_ALL/rfe004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_ALL/test.desc new file mode 100644 index 00000000000..a1810cd5653 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe004.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_OPC/rfe004.c b/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_OPC/rfe004.c new file mode 100644 index 00000000000..9683f7c7d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_OPC/rfe004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_OPC/test.desc new file mode 100644 index 00000000000..c645ce1c22a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe004.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_OPT/rfe004.c b/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_OPT/rfe004.c new file mode 100644 index 00000000000..9683f7c7d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_OPT/rfe004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_OPT/test.desc new file mode 100644 index 00000000000..d65c8b13c5b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe004.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_SC_SAFE/rfe004.c b/regression/goto-instrument-wmm-core/ppc_rfe004_SC_SAFE/rfe004.c new file mode 100644 index 00000000000..9683f7c7d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_SC_SAFE/rfe004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe004_SC_SAFE/test.desc new file mode 100644 index 00000000000..663d836f70d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe004.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_ALL/rfe004.c b/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_ALL/rfe004.c new file mode 100644 index 00000000000..9683f7c7d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_ALL/rfe004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_ALL/test.desc new file mode 100644 index 00000000000..7ce3fa7e79e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe004.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_OPC/rfe004.c b/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_OPC/rfe004.c new file mode 100644 index 00000000000..9683f7c7d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_OPC/rfe004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_OPC/test.desc new file mode 100644 index 00000000000..691bbb1cb1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe004.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_OPT/rfe004.c b/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_OPT/rfe004.c new file mode 100644 index 00000000000..9683f7c7d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_OPT/rfe004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p2_r1 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_OPT/test.desc new file mode 100644 index 00000000000..67797eec9b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe004_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe004.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_CAV11_ERROR/rfe005.c b/regression/goto-instrument-wmm-core/ppc_rfe005_CAV11_ERROR/rfe005.c new file mode 100644 index 00000000000..fe0b72c0a25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_CAV11_ERROR/rfe005.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe005_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..3b24473baa5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe005.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_ALL/rfe005.c b/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_ALL/rfe005.c new file mode 100644 index 00000000000..fe0b72c0a25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_ALL/rfe005.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_ALL/test.desc new file mode 100644 index 00000000000..2760ef141ac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +rfe005.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_OPC/rfe005.c b/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_OPC/rfe005.c new file mode 100644 index 00000000000..fe0b72c0a25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_OPC/rfe005.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_OPC/test.desc new file mode 100644 index 00000000000..c53c9396c74 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe005.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_OPT/rfe005.c b/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_OPT/rfe005.c new file mode 100644 index 00000000000..fe0b72c0a25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_OPT/rfe005.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_OPT/test.desc new file mode 100644 index 00000000000..bffb5f8c29b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe005.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_ALL/rfe005.c b/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_ALL/rfe005.c new file mode 100644 index 00000000000..fe0b72c0a25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_ALL/rfe005.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_ALL/test.desc new file mode 100644 index 00000000000..c6b31cb693c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe005.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_OPC/rfe005.c b/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_OPC/rfe005.c new file mode 100644 index 00000000000..fe0b72c0a25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_OPC/rfe005.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_OPC/test.desc new file mode 100644 index 00000000000..c18686cf612 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe005.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_OPT/rfe005.c b/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_OPT/rfe005.c new file mode 100644 index 00000000000..fe0b72c0a25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_OPT/rfe005.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_OPT/test.desc new file mode 100644 index 00000000000..128a9da0f2b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe005.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_ALL/rfe005.c b/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_ALL/rfe005.c new file mode 100644 index 00000000000..fe0b72c0a25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_ALL/rfe005.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_ALL/test.desc new file mode 100644 index 00000000000..2dc2473f4f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe005.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_OPC/rfe005.c b/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_OPC/rfe005.c new file mode 100644 index 00000000000..fe0b72c0a25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_OPC/rfe005.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_OPC/test.desc new file mode 100644 index 00000000000..b25365b0cad --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe005.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_OPT/rfe005.c b/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_OPT/rfe005.c new file mode 100644 index 00000000000..fe0b72c0a25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_OPT/rfe005.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_OPT/test.desc new file mode 100644 index 00000000000..cd8ec1241df --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe005.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_SC_SAFE/rfe005.c b/regression/goto-instrument-wmm-core/ppc_rfe005_SC_SAFE/rfe005.c new file mode 100644 index 00000000000..fe0b72c0a25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_SC_SAFE/rfe005.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe005_SC_SAFE/test.desc new file mode 100644 index 00000000000..bc752c61b20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe005.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_ALL/rfe005.c b/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_ALL/rfe005.c new file mode 100644 index 00000000000..fe0b72c0a25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_ALL/rfe005.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_ALL/test.desc new file mode 100644 index 00000000000..6a6c5f9b206 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe005.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_OPC/rfe005.c b/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_OPC/rfe005.c new file mode 100644 index 00000000000..fe0b72c0a25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_OPC/rfe005.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_OPC/test.desc new file mode 100644 index 00000000000..7419bbf6631 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe005.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_OPT/rfe005.c b/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_OPT/rfe005.c new file mode 100644 index 00000000000..fe0b72c0a25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_OPT/rfe005.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 2; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_OPT/test.desc new file mode 100644 index 00000000000..6c99dd1a118 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe005_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe005.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_CAV11_SAFE/rfe006.c b/regression/goto-instrument-wmm-core/ppc_rfe006_CAV11_SAFE/rfe006.c new file mode 100644 index 00000000000..1d820f3e05d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_CAV11_SAFE/rfe006.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe006_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..97fe27e42d8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe006.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_ALL/rfe006.c b/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_ALL/rfe006.c new file mode 100644 index 00000000000..1d820f3e05d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_ALL/rfe006.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_ALL/test.desc new file mode 100644 index 00000000000..e2ff6f146b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +rfe006.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_OPC/rfe006.c b/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_OPC/rfe006.c new file mode 100644 index 00000000000..1d820f3e05d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_OPC/rfe006.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_OPC/test.desc new file mode 100644 index 00000000000..d1d85b0be5d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe006.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_OPT/rfe006.c b/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_OPT/rfe006.c new file mode 100644 index 00000000000..1d820f3e05d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_OPT/rfe006.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_OPT/test.desc new file mode 100644 index 00000000000..2a0eed300e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe006.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_ALL/rfe006.c b/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_ALL/rfe006.c new file mode 100644 index 00000000000..1d820f3e05d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_ALL/rfe006.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_ALL/test.desc new file mode 100644 index 00000000000..af974e7f57c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +rfe006.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_OPC/rfe006.c b/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_OPC/rfe006.c new file mode 100644 index 00000000000..1d820f3e05d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_OPC/rfe006.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_OPC/test.desc new file mode 100644 index 00000000000..7125541b0b1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +rfe006.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_OPT/rfe006.c b/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_OPT/rfe006.c new file mode 100644 index 00000000000..1d820f3e05d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_OPT/rfe006.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_OPT/test.desc new file mode 100644 index 00000000000..4697b491d45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe006.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_ALL/rfe006.c b/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_ALL/rfe006.c new file mode 100644 index 00000000000..1d820f3e05d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_ALL/rfe006.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_ALL/test.desc new file mode 100644 index 00000000000..60b389f35ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe006.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_OPC/rfe006.c b/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_OPC/rfe006.c new file mode 100644 index 00000000000..1d820f3e05d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_OPC/rfe006.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_OPC/test.desc new file mode 100644 index 00000000000..cf2a22ddaab --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe006.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_OPT/rfe006.c b/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_OPT/rfe006.c new file mode 100644 index 00000000000..1d820f3e05d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_OPT/rfe006.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_OPT/test.desc new file mode 100644 index 00000000000..91318bae9c1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe006.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_SC_SAFE/rfe006.c b/regression/goto-instrument-wmm-core/ppc_rfe006_SC_SAFE/rfe006.c new file mode 100644 index 00000000000..1d820f3e05d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_SC_SAFE/rfe006.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe006_SC_SAFE/test.desc new file mode 100644 index 00000000000..69144c37351 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfe006.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_ALL/rfe006.c b/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_ALL/rfe006.c new file mode 100644 index 00000000000..1d820f3e05d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_ALL/rfe006.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_ALL/test.desc new file mode 100644 index 00000000000..af6e571dea2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +rfe006.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_OPC/rfe006.c b/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_OPC/rfe006.c new file mode 100644 index 00000000000..1d820f3e05d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_OPC/rfe006.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_OPC/test.desc new file mode 100644 index 00000000000..3974c72d0ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +rfe006.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_OPT/rfe006.c b/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_OPT/rfe006.c new file mode 100644 index 00000000000..1d820f3e05d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_OPT/rfe006.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = *(&x + __unbuffered_p0_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = 1; + y = __unbuffered_p3_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r4 == 0 && + __unbuffered_p2_r1 == 1 && __unbuffered_p2_r4 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_OPT/test.desc new file mode 100644 index 00000000000..df46f279240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfe006_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfe006.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_CAV11_ERROR/rfi000.c b/regression/goto-instrument-wmm-core/ppc_rfi000_CAV11_ERROR/rfi000.c new file mode 100644 index 00000000000..cbd34c8e45a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_CAV11_ERROR/rfi000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..75dc2580e8d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_ALL/rfi000.c b/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_ALL/rfi000.c new file mode 100644 index 00000000000..cbd34c8e45a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_ALL/rfi000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_ALL/test.desc new file mode 100644 index 00000000000..fbb692179eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_OPC/rfi000.c b/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_OPC/rfi000.c new file mode 100644 index 00000000000..cbd34c8e45a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_OPC/rfi000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_OPC/test.desc new file mode 100644 index 00000000000..922454c99a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_OPT/rfi000.c b/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_OPT/rfi000.c new file mode 100644 index 00000000000..cbd34c8e45a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_OPT/rfi000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_OPT/test.desc new file mode 100644 index 00000000000..31d487e034c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_ALL/rfi000.c b/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_ALL/rfi000.c new file mode 100644 index 00000000000..cbd34c8e45a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_ALL/rfi000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_ALL/test.desc new file mode 100644 index 00000000000..185f2e7d5cc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_OPC/rfi000.c b/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_OPC/rfi000.c new file mode 100644 index 00000000000..cbd34c8e45a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_OPC/rfi000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_OPC/test.desc new file mode 100644 index 00000000000..9a119158132 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_OPT/rfi000.c b/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_OPT/rfi000.c new file mode 100644 index 00000000000..cbd34c8e45a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_OPT/rfi000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_OPT/test.desc new file mode 100644 index 00000000000..bff79517654 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi000.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_ALL/rfi000.c b/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_ALL/rfi000.c new file mode 100644 index 00000000000..cbd34c8e45a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_ALL/rfi000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_ALL/test.desc new file mode 100644 index 00000000000..908e4d00fb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_OPC/rfi000.c b/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_OPC/rfi000.c new file mode 100644 index 00000000000..cbd34c8e45a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_OPC/rfi000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_OPC/test.desc new file mode 100644 index 00000000000..9f676702d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_OPT/rfi000.c b/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_OPT/rfi000.c new file mode 100644 index 00000000000..cbd34c8e45a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_OPT/rfi000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_OPT/test.desc new file mode 100644 index 00000000000..0c009d7a955 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi000.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_SC_SAFE/rfi000.c b/regression/goto-instrument-wmm-core/ppc_rfi000_SC_SAFE/rfi000.c new file mode 100644 index 00000000000..cbd34c8e45a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_SC_SAFE/rfi000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi000_SC_SAFE/test.desc new file mode 100644 index 00000000000..8893106493b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_ALL/rfi000.c b/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_ALL/rfi000.c new file mode 100644 index 00000000000..cbd34c8e45a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_ALL/rfi000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_ALL/test.desc new file mode 100644 index 00000000000..356510f85c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_OPC/rfi000.c b/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_OPC/rfi000.c new file mode 100644 index 00000000000..cbd34c8e45a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_OPC/rfi000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_OPC/test.desc new file mode 100644 index 00000000000..e708c2325f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_OPT/rfi000.c b/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_OPT/rfi000.c new file mode 100644 index 00000000000..cbd34c8e45a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_OPT/rfi000.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = *(&x + __unbuffered_p1_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 1 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1 && __unbuffered_p1_r5 == 0), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_OPT/test.desc new file mode 100644 index 00000000000..d6ebeddea9e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi000.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_CAV11_ERROR/rfi001.c b/regression/goto-instrument-wmm-core/ppc_rfi001_CAV11_ERROR/rfi001.c new file mode 100644 index 00000000000..c9e4f79449b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_CAV11_ERROR/rfi001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi001_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..c8c3476f676 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_ALL/rfi001.c b/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_ALL/rfi001.c new file mode 100644 index 00000000000..c9e4f79449b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_ALL/rfi001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_ALL/test.desc new file mode 100644 index 00000000000..b5d878600ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_OPC/rfi001.c b/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_OPC/rfi001.c new file mode 100644 index 00000000000..c9e4f79449b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_OPC/rfi001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_OPC/test.desc new file mode 100644 index 00000000000..3b4be1b88f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_OPT/rfi001.c b/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_OPT/rfi001.c new file mode 100644 index 00000000000..c9e4f79449b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_OPT/rfi001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_OPT/test.desc new file mode 100644 index 00000000000..18d8c500a6a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi001.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_ALL/rfi001.c b/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_ALL/rfi001.c new file mode 100644 index 00000000000..c9e4f79449b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_ALL/rfi001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_ALL/test.desc new file mode 100644 index 00000000000..27475e15c8f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_OPC/rfi001.c b/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_OPC/rfi001.c new file mode 100644 index 00000000000..c9e4f79449b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_OPC/rfi001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_OPC/test.desc new file mode 100644 index 00000000000..24f64a2ef42 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_OPT/rfi001.c b/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_OPT/rfi001.c new file mode 100644 index 00000000000..c9e4f79449b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_OPT/rfi001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_OPT/test.desc new file mode 100644 index 00000000000..ec73710576a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi001.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_ALL/rfi001.c b/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_ALL/rfi001.c new file mode 100644 index 00000000000..c9e4f79449b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_ALL/rfi001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_ALL/test.desc new file mode 100644 index 00000000000..8a1d9ba0deb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_OPC/rfi001.c b/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_OPC/rfi001.c new file mode 100644 index 00000000000..c9e4f79449b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_OPC/rfi001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_OPC/test.desc new file mode 100644 index 00000000000..69352608b8c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_OPT/rfi001.c b/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_OPT/rfi001.c new file mode 100644 index 00000000000..c9e4f79449b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_OPT/rfi001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_OPT/test.desc new file mode 100644 index 00000000000..da6de5b2a7b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi001.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_SC_SAFE/rfi001.c b/regression/goto-instrument-wmm-core/ppc_rfi001_SC_SAFE/rfi001.c new file mode 100644 index 00000000000..c9e4f79449b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_SC_SAFE/rfi001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi001_SC_SAFE/test.desc new file mode 100644 index 00000000000..c9d905c442a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_ALL/rfi001.c b/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_ALL/rfi001.c new file mode 100644 index 00000000000..c9e4f79449b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_ALL/rfi001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_ALL/test.desc new file mode 100644 index 00000000000..a69dce9e9a9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_OPC/rfi001.c b/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_OPC/rfi001.c new file mode 100644 index 00000000000..c9e4f79449b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_OPC/rfi001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_OPC/test.desc new file mode 100644 index 00000000000..31ee875a4d8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_OPT/rfi001.c b/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_OPT/rfi001.c new file mode 100644 index 00000000000..c9e4f79449b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_OPT/rfi001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = *(&y + __unbuffered_p0_r4); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p0_r5 == 0 && + __unbuffered_p1_r3 == 1), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_OPT/test.desc new file mode 100644 index 00000000000..e5e26f9c63b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi001.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_CAV11_ERROR/rfi002.c b/regression/goto-instrument-wmm-core/ppc_rfi002_CAV11_ERROR/rfi002.c new file mode 100644 index 00000000000..c220303d7f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_CAV11_ERROR/rfi002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = 1; + *(&y + __unbuffered_p0_r4) = __unbuffered_p0_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p1_r3 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi002_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..9fe9c0548b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_ALL/rfi002.c b/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_ALL/rfi002.c new file mode 100644 index 00000000000..c220303d7f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_ALL/rfi002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = 1; + *(&y + __unbuffered_p0_r4) = __unbuffered_p0_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p1_r3 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_ALL/test.desc new file mode 100644 index 00000000000..528cf0c72ad --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_OPC/rfi002.c b/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_OPC/rfi002.c new file mode 100644 index 00000000000..c220303d7f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_OPC/rfi002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = 1; + *(&y + __unbuffered_p0_r4) = __unbuffered_p0_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p1_r3 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_OPC/test.desc new file mode 100644 index 00000000000..c0ba0417077 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_OPT/rfi002.c b/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_OPT/rfi002.c new file mode 100644 index 00000000000..c220303d7f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_OPT/rfi002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = 1; + *(&y + __unbuffered_p0_r4) = __unbuffered_p0_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p1_r3 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_OPT/test.desc new file mode 100644 index 00000000000..5f2a6f439f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi002.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_ALL/rfi002.c b/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_ALL/rfi002.c new file mode 100644 index 00000000000..c220303d7f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_ALL/rfi002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = 1; + *(&y + __unbuffered_p0_r4) = __unbuffered_p0_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p1_r3 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_ALL/test.desc new file mode 100644 index 00000000000..cfdabd73ca5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_OPC/rfi002.c b/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_OPC/rfi002.c new file mode 100644 index 00000000000..c220303d7f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_OPC/rfi002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = 1; + *(&y + __unbuffered_p0_r4) = __unbuffered_p0_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p1_r3 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_OPC/test.desc new file mode 100644 index 00000000000..c8a12ba54a2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_OPT/rfi002.c b/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_OPT/rfi002.c new file mode 100644 index 00000000000..c220303d7f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_OPT/rfi002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = 1; + *(&y + __unbuffered_p0_r4) = __unbuffered_p0_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p1_r3 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_OPT/test.desc new file mode 100644 index 00000000000..247c6c62d19 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi002.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_ALL/rfi002.c b/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_ALL/rfi002.c new file mode 100644 index 00000000000..c220303d7f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_ALL/rfi002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = 1; + *(&y + __unbuffered_p0_r4) = __unbuffered_p0_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p1_r3 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_ALL/test.desc new file mode 100644 index 00000000000..97c589a1b68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_OPC/rfi002.c b/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_OPC/rfi002.c new file mode 100644 index 00000000000..c220303d7f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_OPC/rfi002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = 1; + *(&y + __unbuffered_p0_r4) = __unbuffered_p0_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p1_r3 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_OPC/test.desc new file mode 100644 index 00000000000..ee1afb408f9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_OPT/rfi002.c b/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_OPT/rfi002.c new file mode 100644 index 00000000000..c220303d7f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_OPT/rfi002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = 1; + *(&y + __unbuffered_p0_r4) = __unbuffered_p0_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p1_r3 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_OPT/test.desc new file mode 100644 index 00000000000..d7b868608ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi002.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_SC_SAFE/rfi002.c b/regression/goto-instrument-wmm-core/ppc_rfi002_SC_SAFE/rfi002.c new file mode 100644 index 00000000000..c220303d7f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_SC_SAFE/rfi002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = 1; + *(&y + __unbuffered_p0_r4) = __unbuffered_p0_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p1_r3 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi002_SC_SAFE/test.desc new file mode 100644 index 00000000000..ea26d61db05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_ALL/rfi002.c b/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_ALL/rfi002.c new file mode 100644 index 00000000000..c220303d7f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_ALL/rfi002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = 1; + *(&y + __unbuffered_p0_r4) = __unbuffered_p0_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p1_r3 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_ALL/test.desc new file mode 100644 index 00000000000..c817c8a29d5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_OPC/rfi002.c b/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_OPC/rfi002.c new file mode 100644 index 00000000000..c220303d7f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_OPC/rfi002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = 1; + *(&y + __unbuffered_p0_r4) = __unbuffered_p0_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p1_r3 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_OPC/test.desc new file mode 100644 index 00000000000..48b3423eafe --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_OPT/rfi002.c b/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_OPT/rfi002.c new file mode 100644 index 00000000000..c220303d7f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_OPT/rfi002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r5 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r5 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + x = __unbuffered_p0_r1; + __unbuffered_p0_r3 = x; + __unbuffered_p0_r4 = __unbuffered_p0_r3 ^ __unbuffered_p0_r3; + __unbuffered_p0_r5 = 1; + *(&y + __unbuffered_p0_r4) = __unbuffered_p0_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + __unbuffered_p1_r3 = y; + __unbuffered_p1_r4 = __unbuffered_p1_r3 ^ __unbuffered_p1_r3; + __unbuffered_p1_r5 = 1; + *(&x + __unbuffered_p1_r4) = __unbuffered_p1_r5; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 2 && __unbuffered_p1_r3 == 2), + "Program proven to be relaxed for PPC, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_OPT/test.desc new file mode 100644 index 00000000000..7211e374905 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_rfi002_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi002.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_CAV11_ERROR/safe000.c b/regression/goto-instrument-wmm-core/ppc_safe000_CAV11_ERROR/safe000.c new file mode 100644 index 00000000000..6ffd165cbb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_CAV11_ERROR/safe000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..f99285e9f03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_POWER_ALL/safe000.c b/regression/goto-instrument-wmm-core/ppc_safe000_POWER_ALL/safe000.c new file mode 100644 index 00000000000..6ffd165cbb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_POWER_ALL/safe000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe000_POWER_ALL/test.desc new file mode 100644 index 00000000000..53908ee5fcd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe000.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_POWER_OPC/safe000.c b/regression/goto-instrument-wmm-core/ppc_safe000_POWER_OPC/safe000.c new file mode 100644 index 00000000000..6ffd165cbb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_POWER_OPC/safe000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe000_POWER_OPC/test.desc new file mode 100644 index 00000000000..a780aa1db05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe000.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_POWER_OPT/safe000.c b/regression/goto-instrument-wmm-core/ppc_safe000_POWER_OPT/safe000.c new file mode 100644 index 00000000000..6ffd165cbb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_POWER_OPT/safe000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe000_POWER_OPT/test.desc new file mode 100644 index 00000000000..6e9c35e25fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_PSO_ALL/safe000.c b/regression/goto-instrument-wmm-core/ppc_safe000_PSO_ALL/safe000.c new file mode 100644 index 00000000000..6ffd165cbb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_PSO_ALL/safe000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe000_PSO_ALL/test.desc new file mode 100644 index 00000000000..d425842f63d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_PSO_OPC/safe000.c b/regression/goto-instrument-wmm-core/ppc_safe000_PSO_OPC/safe000.c new file mode 100644 index 00000000000..6ffd165cbb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_PSO_OPC/safe000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe000_PSO_OPC/test.desc new file mode 100644 index 00000000000..740a93b35fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_PSO_OPT/safe000.c b/regression/goto-instrument-wmm-core/ppc_safe000_PSO_OPT/safe000.c new file mode 100644 index 00000000000..6ffd165cbb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_PSO_OPT/safe000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe000_PSO_OPT/test.desc new file mode 100644 index 00000000000..11549c7ee2c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe000.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_RMO_ALL/safe000.c b/regression/goto-instrument-wmm-core/ppc_safe000_RMO_ALL/safe000.c new file mode 100644 index 00000000000..6ffd165cbb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_RMO_ALL/safe000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe000_RMO_ALL/test.desc new file mode 100644 index 00000000000..2386b929a96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_RMO_OPC/safe000.c b/regression/goto-instrument-wmm-core/ppc_safe000_RMO_OPC/safe000.c new file mode 100644 index 00000000000..6ffd165cbb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_RMO_OPC/safe000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe000_RMO_OPC/test.desc new file mode 100644 index 00000000000..bc756b28ae7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_RMO_OPT/safe000.c b/regression/goto-instrument-wmm-core/ppc_safe000_RMO_OPT/safe000.c new file mode 100644 index 00000000000..6ffd165cbb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_RMO_OPT/safe000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe000_RMO_OPT/test.desc new file mode 100644 index 00000000000..35fb08de84c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe000.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_SC_SAFE/safe000.c b/regression/goto-instrument-wmm-core/ppc_safe000_SC_SAFE/safe000.c new file mode 100644 index 00000000000..6ffd165cbb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_SC_SAFE/safe000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe000_SC_SAFE/test.desc new file mode 100644 index 00000000000..7f5a08d84b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_TSO_ALL/safe000.c b/regression/goto-instrument-wmm-core/ppc_safe000_TSO_ALL/safe000.c new file mode 100644 index 00000000000..6ffd165cbb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_TSO_ALL/safe000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe000_TSO_ALL/test.desc new file mode 100644 index 00000000000..1f392bc20dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_TSO_OPC/safe000.c b/regression/goto-instrument-wmm-core/ppc_safe000_TSO_OPC/safe000.c new file mode 100644 index 00000000000..6ffd165cbb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_TSO_OPC/safe000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe000_TSO_OPC/test.desc new file mode 100644 index 00000000000..381fb6e6ff1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_TSO_OPT/safe000.c b/regression/goto-instrument-wmm-core/ppc_safe000_TSO_OPT/safe000.c new file mode 100644 index 00000000000..6ffd165cbb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_TSO_OPT/safe000.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe000_TSO_OPT/test.desc new file mode 100644 index 00000000000..5100ea476ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe000.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_CAV11_ERROR/safe001.c b/regression/goto-instrument-wmm-core/ppc_safe001_CAV11_ERROR/safe001.c new file mode 100644 index 00000000000..9cdaf193ec5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_CAV11_ERROR/safe001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe001_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..b3180f789af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_POWER_ALL/safe001.c b/regression/goto-instrument-wmm-core/ppc_safe001_POWER_ALL/safe001.c new file mode 100644 index 00000000000..9cdaf193ec5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_POWER_ALL/safe001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe001_POWER_ALL/test.desc new file mode 100644 index 00000000000..a626332e993 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_POWER_OPC/safe001.c b/regression/goto-instrument-wmm-core/ppc_safe001_POWER_OPC/safe001.c new file mode 100644 index 00000000000..9cdaf193ec5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_POWER_OPC/safe001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe001_POWER_OPC/test.desc new file mode 100644 index 00000000000..5219a8ab605 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_POWER_OPT/safe001.c b/regression/goto-instrument-wmm-core/ppc_safe001_POWER_OPT/safe001.c new file mode 100644 index 00000000000..9cdaf193ec5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_POWER_OPT/safe001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe001_POWER_OPT/test.desc new file mode 100644 index 00000000000..240c29af42c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe001.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_PSO_ALL/safe001.c b/regression/goto-instrument-wmm-core/ppc_safe001_PSO_ALL/safe001.c new file mode 100644 index 00000000000..9cdaf193ec5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_PSO_ALL/safe001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe001_PSO_ALL/test.desc new file mode 100644 index 00000000000..4c47af37cf0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_PSO_OPC/safe001.c b/regression/goto-instrument-wmm-core/ppc_safe001_PSO_OPC/safe001.c new file mode 100644 index 00000000000..9cdaf193ec5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_PSO_OPC/safe001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe001_PSO_OPC/test.desc new file mode 100644 index 00000000000..97d2cc6cd96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_PSO_OPT/safe001.c b/regression/goto-instrument-wmm-core/ppc_safe001_PSO_OPT/safe001.c new file mode 100644 index 00000000000..9cdaf193ec5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_PSO_OPT/safe001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe001_PSO_OPT/test.desc new file mode 100644 index 00000000000..53fe4b723b6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe001.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_RMO_ALL/safe001.c b/regression/goto-instrument-wmm-core/ppc_safe001_RMO_ALL/safe001.c new file mode 100644 index 00000000000..9cdaf193ec5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_RMO_ALL/safe001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe001_RMO_ALL/test.desc new file mode 100644 index 00000000000..c10f815acef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_RMO_OPC/safe001.c b/regression/goto-instrument-wmm-core/ppc_safe001_RMO_OPC/safe001.c new file mode 100644 index 00000000000..9cdaf193ec5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_RMO_OPC/safe001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe001_RMO_OPC/test.desc new file mode 100644 index 00000000000..593015c0bec --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_RMO_OPT/safe001.c b/regression/goto-instrument-wmm-core/ppc_safe001_RMO_OPT/safe001.c new file mode 100644 index 00000000000..9cdaf193ec5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_RMO_OPT/safe001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe001_RMO_OPT/test.desc new file mode 100644 index 00000000000..35b3fee309a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe001.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_SC_SAFE/safe001.c b/regression/goto-instrument-wmm-core/ppc_safe001_SC_SAFE/safe001.c new file mode 100644 index 00000000000..9cdaf193ec5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_SC_SAFE/safe001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe001_SC_SAFE/test.desc new file mode 100644 index 00000000000..00e3393cb17 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_TSO_ALL/safe001.c b/regression/goto-instrument-wmm-core/ppc_safe001_TSO_ALL/safe001.c new file mode 100644 index 00000000000..9cdaf193ec5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_TSO_ALL/safe001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe001_TSO_ALL/test.desc new file mode 100644 index 00000000000..a1c5513238a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_TSO_OPC/safe001.c b/regression/goto-instrument-wmm-core/ppc_safe001_TSO_OPC/safe001.c new file mode 100644 index 00000000000..9cdaf193ec5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_TSO_OPC/safe001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe001_TSO_OPC/test.desc new file mode 100644 index 00000000000..74ff0246456 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_TSO_OPT/safe001.c b/regression/goto-instrument-wmm-core/ppc_safe001_TSO_OPT/safe001.c new file mode 100644 index 00000000000..9cdaf193ec5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_TSO_OPT/safe001.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&y + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe001_TSO_OPT/test.desc new file mode 100644 index 00000000000..a1bba8a2ac9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe001.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_CAV11_ERROR/safe002.c b/regression/goto-instrument-wmm-core/ppc_safe002_CAV11_ERROR/safe002.c new file mode 100644 index 00000000000..8ab3de2c694 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_CAV11_ERROR/safe002.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe002_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..7bca60e1e70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe002.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_POWER_ALL/safe002.c b/regression/goto-instrument-wmm-core/ppc_safe002_POWER_ALL/safe002.c new file mode 100644 index 00000000000..8ab3de2c694 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_POWER_ALL/safe002.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe002_POWER_ALL/test.desc new file mode 100644 index 00000000000..02e51527405 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe002.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_POWER_OPC/safe002.c b/regression/goto-instrument-wmm-core/ppc_safe002_POWER_OPC/safe002.c new file mode 100644 index 00000000000..8ab3de2c694 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_POWER_OPC/safe002.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe002_POWER_OPC/test.desc new file mode 100644 index 00000000000..f03b3108fed --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe002.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe002_POWER_OPT/test.desc index 25c8aaf692d..eab68f03958 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe002_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe002_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe002.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_PSO_ALL/safe002.c b/regression/goto-instrument-wmm-core/ppc_safe002_PSO_ALL/safe002.c new file mode 100644 index 00000000000..8ab3de2c694 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_PSO_ALL/safe002.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe002_PSO_ALL/test.desc new file mode 100644 index 00000000000..86ef382c27a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe002.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_PSO_OPC/safe002.c b/regression/goto-instrument-wmm-core/ppc_safe002_PSO_OPC/safe002.c new file mode 100644 index 00000000000..8ab3de2c694 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_PSO_OPC/safe002.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe002_PSO_OPC/test.desc new file mode 100644 index 00000000000..50bfa53c5ac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe002.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_PSO_OPT/safe002.c b/regression/goto-instrument-wmm-core/ppc_safe002_PSO_OPT/safe002.c new file mode 100644 index 00000000000..8ab3de2c694 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_PSO_OPT/safe002.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe002_PSO_OPT/test.desc new file mode 100644 index 00000000000..3fc70880e79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe002.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_RMO_ALL/safe002.c b/regression/goto-instrument-wmm-core/ppc_safe002_RMO_ALL/safe002.c new file mode 100644 index 00000000000..8ab3de2c694 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_RMO_ALL/safe002.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe002_RMO_ALL/test.desc new file mode 100644 index 00000000000..4f0594601cc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe002.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_RMO_OPC/safe002.c b/regression/goto-instrument-wmm-core/ppc_safe002_RMO_OPC/safe002.c new file mode 100644 index 00000000000..8ab3de2c694 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_RMO_OPC/safe002.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe002_RMO_OPC/test.desc new file mode 100644 index 00000000000..177ac85a789 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe002.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_RMO_OPT/safe002.c b/regression/goto-instrument-wmm-core/ppc_safe002_RMO_OPT/safe002.c new file mode 100644 index 00000000000..8ab3de2c694 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_RMO_OPT/safe002.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe002_RMO_OPT/test.desc new file mode 100644 index 00000000000..1bfa226ce1c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe002.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_SC_SAFE/safe002.c b/regression/goto-instrument-wmm-core/ppc_safe002_SC_SAFE/safe002.c new file mode 100644 index 00000000000..8ab3de2c694 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_SC_SAFE/safe002.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe002_SC_SAFE/test.desc new file mode 100644 index 00000000000..a0714c10c4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe002.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_TSO_ALL/safe002.c b/regression/goto-instrument-wmm-core/ppc_safe002_TSO_ALL/safe002.c new file mode 100644 index 00000000000..8ab3de2c694 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_TSO_ALL/safe002.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe002_TSO_ALL/test.desc new file mode 100644 index 00000000000..052dacecb3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe002.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_TSO_OPC/safe002.c b/regression/goto-instrument-wmm-core/ppc_safe002_TSO_OPC/safe002.c new file mode 100644 index 00000000000..8ab3de2c694 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_TSO_OPC/safe002.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe002_TSO_OPC/test.desc new file mode 100644 index 00000000000..925e2dc2d4a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe002.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_TSO_OPT/safe002.c b/regression/goto-instrument-wmm-core/ppc_safe002_TSO_OPT/safe002.c new file mode 100644 index 00000000000..8ab3de2c694 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_TSO_OPT/safe002.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe002_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe002_TSO_OPT/test.desc new file mode 100644 index 00000000000..29e63a335b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe002_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe002.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_CAV11_ERROR/safe003.c b/regression/goto-instrument-wmm-core/ppc_safe003_CAV11_ERROR/safe003.c new file mode 100644 index 00000000000..eb0bb9220f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_CAV11_ERROR/safe003.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe003_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..8fba9f4937b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe003.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_POWER_ALL/safe003.c b/regression/goto-instrument-wmm-core/ppc_safe003_POWER_ALL/safe003.c new file mode 100644 index 00000000000..eb0bb9220f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_POWER_ALL/safe003.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe003_POWER_ALL/test.desc new file mode 100644 index 00000000000..6353e95a739 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe003.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_POWER_OPC/safe003.c b/regression/goto-instrument-wmm-core/ppc_safe003_POWER_OPC/safe003.c new file mode 100644 index 00000000000..eb0bb9220f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_POWER_OPC/safe003.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe003_POWER_OPC/test.desc new file mode 100644 index 00000000000..c05015cca62 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe003.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_POWER_OPT/safe003.c b/regression/goto-instrument-wmm-core/ppc_safe003_POWER_OPT/safe003.c new file mode 100644 index 00000000000..eb0bb9220f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_POWER_OPT/safe003.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe003_POWER_OPT/test.desc new file mode 100644 index 00000000000..f5396c46b9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe003.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_PSO_ALL/safe003.c b/regression/goto-instrument-wmm-core/ppc_safe003_PSO_ALL/safe003.c new file mode 100644 index 00000000000..eb0bb9220f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_PSO_ALL/safe003.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe003_PSO_ALL/test.desc new file mode 100644 index 00000000000..d575cc1ebd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe003.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_PSO_OPC/safe003.c b/regression/goto-instrument-wmm-core/ppc_safe003_PSO_OPC/safe003.c new file mode 100644 index 00000000000..eb0bb9220f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_PSO_OPC/safe003.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe003_PSO_OPC/test.desc new file mode 100644 index 00000000000..06e306706e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe003.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_PSO_OPT/safe003.c b/regression/goto-instrument-wmm-core/ppc_safe003_PSO_OPT/safe003.c new file mode 100644 index 00000000000..eb0bb9220f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_PSO_OPT/safe003.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe003_PSO_OPT/test.desc new file mode 100644 index 00000000000..0e88710709f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe003.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_RMO_ALL/safe003.c b/regression/goto-instrument-wmm-core/ppc_safe003_RMO_ALL/safe003.c new file mode 100644 index 00000000000..eb0bb9220f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_RMO_ALL/safe003.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe003_RMO_ALL/test.desc new file mode 100644 index 00000000000..3a8f9fa2858 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe003.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_RMO_OPC/safe003.c b/regression/goto-instrument-wmm-core/ppc_safe003_RMO_OPC/safe003.c new file mode 100644 index 00000000000..eb0bb9220f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_RMO_OPC/safe003.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe003_RMO_OPC/test.desc new file mode 100644 index 00000000000..ab9d91b2d15 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe003.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_RMO_OPT/safe003.c b/regression/goto-instrument-wmm-core/ppc_safe003_RMO_OPT/safe003.c new file mode 100644 index 00000000000..eb0bb9220f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_RMO_OPT/safe003.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe003_RMO_OPT/test.desc new file mode 100644 index 00000000000..4d2fb8f4aa5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe003.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_SC_SAFE/safe003.c b/regression/goto-instrument-wmm-core/ppc_safe003_SC_SAFE/safe003.c new file mode 100644 index 00000000000..eb0bb9220f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_SC_SAFE/safe003.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe003_SC_SAFE/test.desc new file mode 100644 index 00000000000..5d6ccdca18a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe003.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_TSO_ALL/safe003.c b/regression/goto-instrument-wmm-core/ppc_safe003_TSO_ALL/safe003.c new file mode 100644 index 00000000000..eb0bb9220f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_TSO_ALL/safe003.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe003_TSO_ALL/test.desc new file mode 100644 index 00000000000..33ed24e5751 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe003.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_TSO_OPC/safe003.c b/regression/goto-instrument-wmm-core/ppc_safe003_TSO_OPC/safe003.c new file mode 100644 index 00000000000..eb0bb9220f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_TSO_OPC/safe003.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe003_TSO_OPC/test.desc new file mode 100644 index 00000000000..0ee79cca735 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe003.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_TSO_OPT/safe003.c b/regression/goto-instrument-wmm-core/ppc_safe003_TSO_OPT/safe003.c new file mode 100644 index 00000000000..eb0bb9220f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_TSO_OPT/safe003.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe003_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe003_TSO_OPT/test.desc new file mode 100644 index 00000000000..7f0378eaca4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe003_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe003.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_CAV11_ERROR/safe004.c b/regression/goto-instrument-wmm-core/ppc_safe004_CAV11_ERROR/safe004.c new file mode 100644 index 00000000000..6b1fa9a097a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_CAV11_ERROR/safe004.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe004_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..cbbcb22336f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe004.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_POWER_ALL/safe004.c b/regression/goto-instrument-wmm-core/ppc_safe004_POWER_ALL/safe004.c new file mode 100644 index 00000000000..6b1fa9a097a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_POWER_ALL/safe004.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe004_POWER_ALL/test.desc new file mode 100644 index 00000000000..3e6f1cdda98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe004.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_POWER_OPC/safe004.c b/regression/goto-instrument-wmm-core/ppc_safe004_POWER_OPC/safe004.c new file mode 100644 index 00000000000..6b1fa9a097a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_POWER_OPC/safe004.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe004_POWER_OPC/test.desc new file mode 100644 index 00000000000..9c68bf2ded2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +safe004.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_POWER_OPT/safe004.c b/regression/goto-instrument-wmm-core/ppc_safe004_POWER_OPT/safe004.c new file mode 100644 index 00000000000..6b1fa9a097a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_POWER_OPT/safe004.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe004_POWER_OPT/test.desc new file mode 100644 index 00000000000..dba81306064 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe004.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_PSO_ALL/safe004.c b/regression/goto-instrument-wmm-core/ppc_safe004_PSO_ALL/safe004.c new file mode 100644 index 00000000000..6b1fa9a097a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_PSO_ALL/safe004.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe004_PSO_ALL/test.desc new file mode 100644 index 00000000000..87122b44390 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe004.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_PSO_OPC/safe004.c b/regression/goto-instrument-wmm-core/ppc_safe004_PSO_OPC/safe004.c new file mode 100644 index 00000000000..6b1fa9a097a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_PSO_OPC/safe004.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe004_PSO_OPC/test.desc new file mode 100644 index 00000000000..cbc369d4276 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe004.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_PSO_OPT/safe004.c b/regression/goto-instrument-wmm-core/ppc_safe004_PSO_OPT/safe004.c new file mode 100644 index 00000000000..6b1fa9a097a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_PSO_OPT/safe004.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe004_PSO_OPT/test.desc new file mode 100644 index 00000000000..6a2e45dcad1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe004.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_RMO_ALL/safe004.c b/regression/goto-instrument-wmm-core/ppc_safe004_RMO_ALL/safe004.c new file mode 100644 index 00000000000..6b1fa9a097a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_RMO_ALL/safe004.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe004_RMO_ALL/test.desc new file mode 100644 index 00000000000..1d0d3166393 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe004.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_RMO_OPC/safe004.c b/regression/goto-instrument-wmm-core/ppc_safe004_RMO_OPC/safe004.c new file mode 100644 index 00000000000..6b1fa9a097a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_RMO_OPC/safe004.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe004_RMO_OPC/test.desc new file mode 100644 index 00000000000..4b22bdb947f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe004.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_RMO_OPT/safe004.c b/regression/goto-instrument-wmm-core/ppc_safe004_RMO_OPT/safe004.c new file mode 100644 index 00000000000..6b1fa9a097a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_RMO_OPT/safe004.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe004_RMO_OPT/test.desc new file mode 100644 index 00000000000..8399f1eb10c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe004.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_SC_SAFE/safe004.c b/regression/goto-instrument-wmm-core/ppc_safe004_SC_SAFE/safe004.c new file mode 100644 index 00000000000..6b1fa9a097a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_SC_SAFE/safe004.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe004_SC_SAFE/test.desc new file mode 100644 index 00000000000..ebf2da333db --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe004.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_TSO_ALL/safe004.c b/regression/goto-instrument-wmm-core/ppc_safe004_TSO_ALL/safe004.c new file mode 100644 index 00000000000..6b1fa9a097a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_TSO_ALL/safe004.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe004_TSO_ALL/test.desc new file mode 100644 index 00000000000..03f0dc9b3b5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe004.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_TSO_OPC/safe004.c b/regression/goto-instrument-wmm-core/ppc_safe004_TSO_OPC/safe004.c new file mode 100644 index 00000000000..6b1fa9a097a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_TSO_OPC/safe004.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe004_TSO_OPC/test.desc new file mode 100644 index 00000000000..63eca5e000c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe004.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_TSO_OPT/safe004.c b/regression/goto-instrument-wmm-core/ppc_safe004_TSO_OPT/safe004.c new file mode 100644 index 00000000000..6b1fa9a097a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_TSO_OPT/safe004.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe004_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe004_TSO_OPT/test.desc new file mode 100644 index 00000000000..57b1732d750 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe004_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe004.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_CAV11_ERROR/safe005.c b/regression/goto-instrument-wmm-core/ppc_safe005_CAV11_ERROR/safe005.c new file mode 100644 index 00000000000..aadd54724c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_CAV11_ERROR/safe005.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe005_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..0970502dc68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_POWER_ALL/safe005.c b/regression/goto-instrument-wmm-core/ppc_safe005_POWER_ALL/safe005.c new file mode 100644 index 00000000000..aadd54724c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_POWER_ALL/safe005.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe005_POWER_ALL/test.desc new file mode 100644 index 00000000000..a28f8340e92 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_POWER_OPC/safe005.c b/regression/goto-instrument-wmm-core/ppc_safe005_POWER_OPC/safe005.c new file mode 100644 index 00000000000..aadd54724c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_POWER_OPC/safe005.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe005_POWER_OPC/test.desc new file mode 100644 index 00000000000..adecfa9e526 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_POWER_OPT/safe005.c b/regression/goto-instrument-wmm-core/ppc_safe005_POWER_OPT/safe005.c new file mode 100644 index 00000000000..aadd54724c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_POWER_OPT/safe005.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe005_POWER_OPT/test.desc new file mode 100644 index 00000000000..7b4bc77c888 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe005.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_PSO_ALL/safe005.c b/regression/goto-instrument-wmm-core/ppc_safe005_PSO_ALL/safe005.c new file mode 100644 index 00000000000..aadd54724c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_PSO_ALL/safe005.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe005_PSO_ALL/test.desc new file mode 100644 index 00000000000..e4eeac610c1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_PSO_OPC/safe005.c b/regression/goto-instrument-wmm-core/ppc_safe005_PSO_OPC/safe005.c new file mode 100644 index 00000000000..aadd54724c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_PSO_OPC/safe005.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe005_PSO_OPC/test.desc new file mode 100644 index 00000000000..3f9548c948f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_PSO_OPT/safe005.c b/regression/goto-instrument-wmm-core/ppc_safe005_PSO_OPT/safe005.c new file mode 100644 index 00000000000..aadd54724c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_PSO_OPT/safe005.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe005_PSO_OPT/test.desc new file mode 100644 index 00000000000..ddab7cb116c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe005.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_RMO_ALL/safe005.c b/regression/goto-instrument-wmm-core/ppc_safe005_RMO_ALL/safe005.c new file mode 100644 index 00000000000..aadd54724c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_RMO_ALL/safe005.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe005_RMO_ALL/test.desc new file mode 100644 index 00000000000..0ada4a56de5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_RMO_OPC/safe005.c b/regression/goto-instrument-wmm-core/ppc_safe005_RMO_OPC/safe005.c new file mode 100644 index 00000000000..aadd54724c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_RMO_OPC/safe005.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe005_RMO_OPC/test.desc new file mode 100644 index 00000000000..9f4c75cf034 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_RMO_OPT/safe005.c b/regression/goto-instrument-wmm-core/ppc_safe005_RMO_OPT/safe005.c new file mode 100644 index 00000000000..aadd54724c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_RMO_OPT/safe005.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe005_RMO_OPT/test.desc new file mode 100644 index 00000000000..31ee9699763 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe005.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_SC_SAFE/safe005.c b/regression/goto-instrument-wmm-core/ppc_safe005_SC_SAFE/safe005.c new file mode 100644 index 00000000000..aadd54724c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_SC_SAFE/safe005.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe005_SC_SAFE/test.desc new file mode 100644 index 00000000000..4377b3d1fb4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_TSO_ALL/safe005.c b/regression/goto-instrument-wmm-core/ppc_safe005_TSO_ALL/safe005.c new file mode 100644 index 00000000000..aadd54724c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_TSO_ALL/safe005.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe005_TSO_ALL/test.desc new file mode 100644 index 00000000000..dcb5104ad55 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_TSO_OPC/safe005.c b/regression/goto-instrument-wmm-core/ppc_safe005_TSO_OPC/safe005.c new file mode 100644 index 00000000000..aadd54724c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_TSO_OPC/safe005.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe005_TSO_OPC/test.desc new file mode 100644 index 00000000000..ba7c2c92276 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_TSO_OPT/safe005.c b/regression/goto-instrument-wmm-core/ppc_safe005_TSO_OPT/safe005.c new file mode 100644 index 00000000000..aadd54724c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_TSO_OPT/safe005.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe005_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe005_TSO_OPT/test.desc new file mode 100644 index 00000000000..e82ea5b9069 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe005_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe005.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_CAV11_ERROR/safe006.c b/regression/goto-instrument-wmm-core/ppc_safe006_CAV11_ERROR/safe006.c new file mode 100644 index 00000000000..b68842537a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_CAV11_ERROR/safe006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe006_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..605b59629b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_POWER_ALL/safe006.c b/regression/goto-instrument-wmm-core/ppc_safe006_POWER_ALL/safe006.c new file mode 100644 index 00000000000..b68842537a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_POWER_ALL/safe006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe006_POWER_ALL/test.desc new file mode 100644 index 00000000000..faf67d354fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_POWER_OPC/safe006.c b/regression/goto-instrument-wmm-core/ppc_safe006_POWER_OPC/safe006.c new file mode 100644 index 00000000000..b68842537a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_POWER_OPC/safe006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe006_POWER_OPC/test.desc new file mode 100644 index 00000000000..7dd02e44fee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_POWER_OPT/safe006.c b/regression/goto-instrument-wmm-core/ppc_safe006_POWER_OPT/safe006.c new file mode 100644 index 00000000000..b68842537a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_POWER_OPT/safe006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe006_POWER_OPT/test.desc new file mode 100644 index 00000000000..9a089da988a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe006.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_PSO_ALL/safe006.c b/regression/goto-instrument-wmm-core/ppc_safe006_PSO_ALL/safe006.c new file mode 100644 index 00000000000..b68842537a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_PSO_ALL/safe006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe006_PSO_ALL/test.desc new file mode 100644 index 00000000000..936907e3396 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_PSO_OPC/safe006.c b/regression/goto-instrument-wmm-core/ppc_safe006_PSO_OPC/safe006.c new file mode 100644 index 00000000000..b68842537a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_PSO_OPC/safe006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe006_PSO_OPC/test.desc new file mode 100644 index 00000000000..254519c665b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_PSO_OPT/safe006.c b/regression/goto-instrument-wmm-core/ppc_safe006_PSO_OPT/safe006.c new file mode 100644 index 00000000000..b68842537a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_PSO_OPT/safe006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe006_PSO_OPT/test.desc new file mode 100644 index 00000000000..5f5e9dd5526 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe006.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_RMO_ALL/safe006.c b/regression/goto-instrument-wmm-core/ppc_safe006_RMO_ALL/safe006.c new file mode 100644 index 00000000000..b68842537a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_RMO_ALL/safe006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe006_RMO_ALL/test.desc new file mode 100644 index 00000000000..f84d3955d91 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_RMO_OPC/safe006.c b/regression/goto-instrument-wmm-core/ppc_safe006_RMO_OPC/safe006.c new file mode 100644 index 00000000000..b68842537a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_RMO_OPC/safe006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe006_RMO_OPC/test.desc new file mode 100644 index 00000000000..a3da8e0d02f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_RMO_OPT/safe006.c b/regression/goto-instrument-wmm-core/ppc_safe006_RMO_OPT/safe006.c new file mode 100644 index 00000000000..b68842537a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_RMO_OPT/safe006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe006_RMO_OPT/test.desc new file mode 100644 index 00000000000..1028099e66f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe006.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_SC_SAFE/safe006.c b/regression/goto-instrument-wmm-core/ppc_safe006_SC_SAFE/safe006.c new file mode 100644 index 00000000000..b68842537a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_SC_SAFE/safe006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe006_SC_SAFE/test.desc new file mode 100644 index 00000000000..3a0ae9d52e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_TSO_ALL/safe006.c b/regression/goto-instrument-wmm-core/ppc_safe006_TSO_ALL/safe006.c new file mode 100644 index 00000000000..b68842537a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_TSO_ALL/safe006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe006_TSO_ALL/test.desc new file mode 100644 index 00000000000..bbacf66a898 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_TSO_OPC/safe006.c b/regression/goto-instrument-wmm-core/ppc_safe006_TSO_OPC/safe006.c new file mode 100644 index 00000000000..b68842537a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_TSO_OPC/safe006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe006_TSO_OPC/test.desc new file mode 100644 index 00000000000..7935b056c3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_TSO_OPT/safe006.c b/regression/goto-instrument-wmm-core/ppc_safe006_TSO_OPT/safe006.c new file mode 100644 index 00000000000..b68842537a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_TSO_OPT/safe006.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe006_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe006_TSO_OPT/test.desc new file mode 100644 index 00000000000..f7fc449e498 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe006_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe006.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_CAV11_ERROR/safe007.c b/regression/goto-instrument-wmm-core/ppc_safe007_CAV11_ERROR/safe007.c new file mode 100644 index 00000000000..9d34acd490a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_CAV11_ERROR/safe007.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe007_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..448cf3a6bef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe007.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_POWER_ALL/safe007.c b/regression/goto-instrument-wmm-core/ppc_safe007_POWER_ALL/safe007.c new file mode 100644 index 00000000000..9d34acd490a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_POWER_ALL/safe007.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe007_POWER_ALL/test.desc new file mode 100644 index 00000000000..8ceb936fc2f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe007.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_POWER_OPC/safe007.c b/regression/goto-instrument-wmm-core/ppc_safe007_POWER_OPC/safe007.c new file mode 100644 index 00000000000..9d34acd490a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_POWER_OPC/safe007.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe007_POWER_OPC/test.desc new file mode 100644 index 00000000000..4fe68960ba3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe007.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_POWER_OPT/safe007.c b/regression/goto-instrument-wmm-core/ppc_safe007_POWER_OPT/safe007.c new file mode 100644 index 00000000000..9d34acd490a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_POWER_OPT/safe007.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe007_POWER_OPT/test.desc new file mode 100644 index 00000000000..9dbdd9a2d24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe007.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_PSO_ALL/safe007.c b/regression/goto-instrument-wmm-core/ppc_safe007_PSO_ALL/safe007.c new file mode 100644 index 00000000000..9d34acd490a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_PSO_ALL/safe007.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe007_PSO_ALL/test.desc new file mode 100644 index 00000000000..7a92b3da154 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe007.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_PSO_OPC/safe007.c b/regression/goto-instrument-wmm-core/ppc_safe007_PSO_OPC/safe007.c new file mode 100644 index 00000000000..9d34acd490a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_PSO_OPC/safe007.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe007_PSO_OPC/test.desc new file mode 100644 index 00000000000..b2f5b66f4e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe007.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_PSO_OPT/safe007.c b/regression/goto-instrument-wmm-core/ppc_safe007_PSO_OPT/safe007.c new file mode 100644 index 00000000000..9d34acd490a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_PSO_OPT/safe007.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe007_PSO_OPT/test.desc new file mode 100644 index 00000000000..a1a9eabd4c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe007.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_RMO_ALL/safe007.c b/regression/goto-instrument-wmm-core/ppc_safe007_RMO_ALL/safe007.c new file mode 100644 index 00000000000..9d34acd490a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_RMO_ALL/safe007.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe007_RMO_ALL/test.desc new file mode 100644 index 00000000000..08d7f1bab5b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe007.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_RMO_OPC/safe007.c b/regression/goto-instrument-wmm-core/ppc_safe007_RMO_OPC/safe007.c new file mode 100644 index 00000000000..9d34acd490a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_RMO_OPC/safe007.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe007_RMO_OPC/test.desc new file mode 100644 index 00000000000..a6faadafdb5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe007.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_RMO_OPT/safe007.c b/regression/goto-instrument-wmm-core/ppc_safe007_RMO_OPT/safe007.c new file mode 100644 index 00000000000..9d34acd490a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_RMO_OPT/safe007.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe007_RMO_OPT/test.desc new file mode 100644 index 00000000000..59c37b5cb0d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe007.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_SC_SAFE/safe007.c b/regression/goto-instrument-wmm-core/ppc_safe007_SC_SAFE/safe007.c new file mode 100644 index 00000000000..9d34acd490a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_SC_SAFE/safe007.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe007_SC_SAFE/test.desc new file mode 100644 index 00000000000..64ac0c24b0a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe007.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_TSO_ALL/safe007.c b/regression/goto-instrument-wmm-core/ppc_safe007_TSO_ALL/safe007.c new file mode 100644 index 00000000000..9d34acd490a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_TSO_ALL/safe007.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe007_TSO_ALL/test.desc new file mode 100644 index 00000000000..1f1dcda6df5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe007.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_TSO_OPC/safe007.c b/regression/goto-instrument-wmm-core/ppc_safe007_TSO_OPC/safe007.c new file mode 100644 index 00000000000..9d34acd490a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_TSO_OPC/safe007.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe007_TSO_OPC/test.desc new file mode 100644 index 00000000000..c3d3ff54585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe007.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_TSO_OPT/safe007.c b/regression/goto-instrument-wmm-core/ppc_safe007_TSO_OPT/safe007.c new file mode 100644 index 00000000000..9d34acd490a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_TSO_OPT/safe007.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe007_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe007_TSO_OPT/test.desc new file mode 100644 index 00000000000..ca2ef67fd1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe007_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe007.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_CAV11_ERROR/safe008.c b/regression/goto-instrument-wmm-core/ppc_safe008_CAV11_ERROR/safe008.c new file mode 100644 index 00000000000..fbdb71f41cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_CAV11_ERROR/safe008.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe008_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..8d8cb1faf0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe008.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_POWER_ALL/safe008.c b/regression/goto-instrument-wmm-core/ppc_safe008_POWER_ALL/safe008.c new file mode 100644 index 00000000000..fbdb71f41cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_POWER_ALL/safe008.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe008_POWER_ALL/test.desc new file mode 100644 index 00000000000..a0c6d8d6692 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe008.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_POWER_OPC/safe008.c b/regression/goto-instrument-wmm-core/ppc_safe008_POWER_OPC/safe008.c new file mode 100644 index 00000000000..fbdb71f41cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_POWER_OPC/safe008.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe008_POWER_OPC/test.desc new file mode 100644 index 00000000000..1182a73fe14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe008.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_POWER_OPT/safe008.c b/regression/goto-instrument-wmm-core/ppc_safe008_POWER_OPT/safe008.c new file mode 100644 index 00000000000..fbdb71f41cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_POWER_OPT/safe008.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe008_POWER_OPT/test.desc new file mode 100644 index 00000000000..326ca4a4bb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe008.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_PSO_ALL/safe008.c b/regression/goto-instrument-wmm-core/ppc_safe008_PSO_ALL/safe008.c new file mode 100644 index 00000000000..fbdb71f41cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_PSO_ALL/safe008.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe008_PSO_ALL/test.desc new file mode 100644 index 00000000000..1ce5f34dcd1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe008.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_PSO_OPC/safe008.c b/regression/goto-instrument-wmm-core/ppc_safe008_PSO_OPC/safe008.c new file mode 100644 index 00000000000..fbdb71f41cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_PSO_OPC/safe008.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe008_PSO_OPC/test.desc new file mode 100644 index 00000000000..4769c8a6371 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe008.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_PSO_OPT/safe008.c b/regression/goto-instrument-wmm-core/ppc_safe008_PSO_OPT/safe008.c new file mode 100644 index 00000000000..fbdb71f41cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_PSO_OPT/safe008.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe008_PSO_OPT/test.desc new file mode 100644 index 00000000000..296bfd62409 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe008.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_RMO_ALL/safe008.c b/regression/goto-instrument-wmm-core/ppc_safe008_RMO_ALL/safe008.c new file mode 100644 index 00000000000..fbdb71f41cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_RMO_ALL/safe008.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe008_RMO_ALL/test.desc new file mode 100644 index 00000000000..78e27467e79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe008.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_RMO_OPC/safe008.c b/regression/goto-instrument-wmm-core/ppc_safe008_RMO_OPC/safe008.c new file mode 100644 index 00000000000..fbdb71f41cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_RMO_OPC/safe008.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe008_RMO_OPC/test.desc new file mode 100644 index 00000000000..73eaff84ed1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe008.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_RMO_OPT/safe008.c b/regression/goto-instrument-wmm-core/ppc_safe008_RMO_OPT/safe008.c new file mode 100644 index 00000000000..fbdb71f41cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_RMO_OPT/safe008.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe008_RMO_OPT/test.desc new file mode 100644 index 00000000000..c2cdd5cf98b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe008.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_SC_SAFE/safe008.c b/regression/goto-instrument-wmm-core/ppc_safe008_SC_SAFE/safe008.c new file mode 100644 index 00000000000..fbdb71f41cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_SC_SAFE/safe008.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe008_SC_SAFE/test.desc new file mode 100644 index 00000000000..fa0cf1271f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe008.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_TSO_ALL/safe008.c b/regression/goto-instrument-wmm-core/ppc_safe008_TSO_ALL/safe008.c new file mode 100644 index 00000000000..fbdb71f41cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_TSO_ALL/safe008.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe008_TSO_ALL/test.desc new file mode 100644 index 00000000000..112c7cb6695 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe008.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_TSO_OPC/safe008.c b/regression/goto-instrument-wmm-core/ppc_safe008_TSO_OPC/safe008.c new file mode 100644 index 00000000000..fbdb71f41cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_TSO_OPC/safe008.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe008_TSO_OPC/test.desc new file mode 100644 index 00000000000..9847607774e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe008.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_TSO_OPT/safe008.c b/regression/goto-instrument-wmm-core/ppc_safe008_TSO_OPT/safe008.c new file mode 100644 index 00000000000..fbdb71f41cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_TSO_OPT/safe008.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe008_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe008_TSO_OPT/test.desc new file mode 100644 index 00000000000..05b97e56552 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe008_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe008.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_CAV11_ERROR/safe009.c b/regression/goto-instrument-wmm-core/ppc_safe009_CAV11_ERROR/safe009.c new file mode 100644 index 00000000000..5c38eaf349a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_CAV11_ERROR/safe009.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe009_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..246406d5bf1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe009.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_POWER_ALL/safe009.c b/regression/goto-instrument-wmm-core/ppc_safe009_POWER_ALL/safe009.c new file mode 100644 index 00000000000..5c38eaf349a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_POWER_ALL/safe009.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe009_POWER_ALL/test.desc new file mode 100644 index 00000000000..7149e3a5222 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe009.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_POWER_OPC/safe009.c b/regression/goto-instrument-wmm-core/ppc_safe009_POWER_OPC/safe009.c new file mode 100644 index 00000000000..5c38eaf349a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_POWER_OPC/safe009.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe009_POWER_OPC/test.desc new file mode 100644 index 00000000000..eeee5c3025a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe009.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_POWER_OPT/safe009.c b/regression/goto-instrument-wmm-core/ppc_safe009_POWER_OPT/safe009.c new file mode 100644 index 00000000000..5c38eaf349a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_POWER_OPT/safe009.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe009_POWER_OPT/test.desc new file mode 100644 index 00000000000..e543f95269e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe009.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_PSO_ALL/safe009.c b/regression/goto-instrument-wmm-core/ppc_safe009_PSO_ALL/safe009.c new file mode 100644 index 00000000000..5c38eaf349a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_PSO_ALL/safe009.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe009_PSO_ALL/test.desc new file mode 100644 index 00000000000..58394c670f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe009.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_PSO_OPC/safe009.c b/regression/goto-instrument-wmm-core/ppc_safe009_PSO_OPC/safe009.c new file mode 100644 index 00000000000..5c38eaf349a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_PSO_OPC/safe009.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe009_PSO_OPC/test.desc new file mode 100644 index 00000000000..ba5cd3e7f29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe009.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_PSO_OPT/safe009.c b/regression/goto-instrument-wmm-core/ppc_safe009_PSO_OPT/safe009.c new file mode 100644 index 00000000000..5c38eaf349a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_PSO_OPT/safe009.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe009_PSO_OPT/test.desc new file mode 100644 index 00000000000..2edf34f9757 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe009.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_RMO_ALL/safe009.c b/regression/goto-instrument-wmm-core/ppc_safe009_RMO_ALL/safe009.c new file mode 100644 index 00000000000..5c38eaf349a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_RMO_ALL/safe009.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe009_RMO_ALL/test.desc new file mode 100644 index 00000000000..8328eb0d169 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe009.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_RMO_OPC/safe009.c b/regression/goto-instrument-wmm-core/ppc_safe009_RMO_OPC/safe009.c new file mode 100644 index 00000000000..5c38eaf349a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_RMO_OPC/safe009.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe009_RMO_OPC/test.desc new file mode 100644 index 00000000000..ac1a5ec3b10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe009.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_RMO_OPT/safe009.c b/regression/goto-instrument-wmm-core/ppc_safe009_RMO_OPT/safe009.c new file mode 100644 index 00000000000..5c38eaf349a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_RMO_OPT/safe009.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe009_RMO_OPT/test.desc new file mode 100644 index 00000000000..148402a040f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe009.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_SC_SAFE/safe009.c b/regression/goto-instrument-wmm-core/ppc_safe009_SC_SAFE/safe009.c new file mode 100644 index 00000000000..5c38eaf349a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_SC_SAFE/safe009.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe009_SC_SAFE/test.desc new file mode 100644 index 00000000000..5d2125a92ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe009.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_TSO_ALL/safe009.c b/regression/goto-instrument-wmm-core/ppc_safe009_TSO_ALL/safe009.c new file mode 100644 index 00000000000..5c38eaf349a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_TSO_ALL/safe009.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe009_TSO_ALL/test.desc new file mode 100644 index 00000000000..2dc8d0ec37f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe009.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_TSO_OPC/safe009.c b/regression/goto-instrument-wmm-core/ppc_safe009_TSO_OPC/safe009.c new file mode 100644 index 00000000000..5c38eaf349a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_TSO_OPC/safe009.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe009_TSO_OPC/test.desc new file mode 100644 index 00000000000..8eb035e04e6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe009.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_TSO_OPT/safe009.c b/regression/goto-instrument-wmm-core/ppc_safe009_TSO_OPT/safe009.c new file mode 100644 index 00000000000..5c38eaf349a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_TSO_OPT/safe009.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe009_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe009_TSO_OPT/test.desc new file mode 100644 index 00000000000..20f4c2522fb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe009_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe009.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_CAV11_ERROR/safe010.c b/regression/goto-instrument-wmm-core/ppc_safe010_CAV11_ERROR/safe010.c new file mode 100644 index 00000000000..57004648842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_CAV11_ERROR/safe010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe010_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..920a7e39735 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_POWER_ALL/safe010.c b/regression/goto-instrument-wmm-core/ppc_safe010_POWER_ALL/safe010.c new file mode 100644 index 00000000000..57004648842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_POWER_ALL/safe010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe010_POWER_ALL/test.desc new file mode 100644 index 00000000000..4ac2565e6a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_POWER_OPC/safe010.c b/regression/goto-instrument-wmm-core/ppc_safe010_POWER_OPC/safe010.c new file mode 100644 index 00000000000..57004648842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_POWER_OPC/safe010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe010_POWER_OPC/test.desc new file mode 100644 index 00000000000..6dd2bc1188b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_POWER_OPT/safe010.c b/regression/goto-instrument-wmm-core/ppc_safe010_POWER_OPT/safe010.c new file mode 100644 index 00000000000..57004648842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_POWER_OPT/safe010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe010_POWER_OPT/test.desc new file mode 100644 index 00000000000..6d14a354809 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe010.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_PSO_ALL/safe010.c b/regression/goto-instrument-wmm-core/ppc_safe010_PSO_ALL/safe010.c new file mode 100644 index 00000000000..57004648842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_PSO_ALL/safe010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe010_PSO_ALL/test.desc new file mode 100644 index 00000000000..73c2834d219 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_PSO_OPC/safe010.c b/regression/goto-instrument-wmm-core/ppc_safe010_PSO_OPC/safe010.c new file mode 100644 index 00000000000..57004648842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_PSO_OPC/safe010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe010_PSO_OPC/test.desc new file mode 100644 index 00000000000..a38ad6398bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_PSO_OPT/safe010.c b/regression/goto-instrument-wmm-core/ppc_safe010_PSO_OPT/safe010.c new file mode 100644 index 00000000000..57004648842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_PSO_OPT/safe010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe010_PSO_OPT/test.desc new file mode 100644 index 00000000000..246db7bef43 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe010.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_RMO_ALL/safe010.c b/regression/goto-instrument-wmm-core/ppc_safe010_RMO_ALL/safe010.c new file mode 100644 index 00000000000..57004648842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_RMO_ALL/safe010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe010_RMO_ALL/test.desc new file mode 100644 index 00000000000..e982ec8a1e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_RMO_OPC/safe010.c b/regression/goto-instrument-wmm-core/ppc_safe010_RMO_OPC/safe010.c new file mode 100644 index 00000000000..57004648842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_RMO_OPC/safe010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe010_RMO_OPC/test.desc new file mode 100644 index 00000000000..9b317e730be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_RMO_OPT/safe010.c b/regression/goto-instrument-wmm-core/ppc_safe010_RMO_OPT/safe010.c new file mode 100644 index 00000000000..57004648842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_RMO_OPT/safe010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe010_RMO_OPT/test.desc new file mode 100644 index 00000000000..018c3ce854e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe010.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_SC_SAFE/safe010.c b/regression/goto-instrument-wmm-core/ppc_safe010_SC_SAFE/safe010.c new file mode 100644 index 00000000000..57004648842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_SC_SAFE/safe010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe010_SC_SAFE/test.desc new file mode 100644 index 00000000000..f5f28cda90e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_TSO_ALL/safe010.c b/regression/goto-instrument-wmm-core/ppc_safe010_TSO_ALL/safe010.c new file mode 100644 index 00000000000..57004648842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_TSO_ALL/safe010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe010_TSO_ALL/test.desc new file mode 100644 index 00000000000..cdc4cc32e9e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_TSO_OPC/safe010.c b/regression/goto-instrument-wmm-core/ppc_safe010_TSO_OPC/safe010.c new file mode 100644 index 00000000000..57004648842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_TSO_OPC/safe010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe010_TSO_OPC/test.desc new file mode 100644 index 00000000000..65a46c66b0f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_TSO_OPT/safe010.c b/regression/goto-instrument-wmm-core/ppc_safe010_TSO_OPT/safe010.c new file mode 100644 index 00000000000..57004648842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_TSO_OPT/safe010.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe010_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe010_TSO_OPT/test.desc new file mode 100644 index 00000000000..e39de8246c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe010_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe010.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_CAV11_ERROR/safe011.c b/regression/goto-instrument-wmm-core/ppc_safe011_CAV11_ERROR/safe011.c new file mode 100644 index 00000000000..12b40d0c72e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_CAV11_ERROR/safe011.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe011_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..a0c68cee927 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_POWER_ALL/safe011.c b/regression/goto-instrument-wmm-core/ppc_safe011_POWER_ALL/safe011.c new file mode 100644 index 00000000000..12b40d0c72e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_POWER_ALL/safe011.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe011_POWER_ALL/test.desc new file mode 100644 index 00000000000..722a9e662a2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_POWER_OPC/safe011.c b/regression/goto-instrument-wmm-core/ppc_safe011_POWER_OPC/safe011.c new file mode 100644 index 00000000000..12b40d0c72e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_POWER_OPC/safe011.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe011_POWER_OPC/test.desc new file mode 100644 index 00000000000..08ca2586bdb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_POWER_OPT/safe011.c b/regression/goto-instrument-wmm-core/ppc_safe011_POWER_OPT/safe011.c new file mode 100644 index 00000000000..12b40d0c72e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_POWER_OPT/safe011.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe011_POWER_OPT/test.desc new file mode 100644 index 00000000000..ccb2463e04c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe011.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_PSO_ALL/safe011.c b/regression/goto-instrument-wmm-core/ppc_safe011_PSO_ALL/safe011.c new file mode 100644 index 00000000000..12b40d0c72e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_PSO_ALL/safe011.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe011_PSO_ALL/test.desc new file mode 100644 index 00000000000..4faea3f5bb5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_PSO_OPC/safe011.c b/regression/goto-instrument-wmm-core/ppc_safe011_PSO_OPC/safe011.c new file mode 100644 index 00000000000..12b40d0c72e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_PSO_OPC/safe011.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe011_PSO_OPC/test.desc new file mode 100644 index 00000000000..152c2082553 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_PSO_OPT/safe011.c b/regression/goto-instrument-wmm-core/ppc_safe011_PSO_OPT/safe011.c new file mode 100644 index 00000000000..12b40d0c72e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_PSO_OPT/safe011.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe011_PSO_OPT/test.desc new file mode 100644 index 00000000000..9fa38a5c24e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe011.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_RMO_ALL/safe011.c b/regression/goto-instrument-wmm-core/ppc_safe011_RMO_ALL/safe011.c new file mode 100644 index 00000000000..12b40d0c72e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_RMO_ALL/safe011.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe011_RMO_ALL/test.desc new file mode 100644 index 00000000000..84b41033c74 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_RMO_OPC/safe011.c b/regression/goto-instrument-wmm-core/ppc_safe011_RMO_OPC/safe011.c new file mode 100644 index 00000000000..12b40d0c72e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_RMO_OPC/safe011.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe011_RMO_OPC/test.desc new file mode 100644 index 00000000000..dfff2812d2b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_RMO_OPT/safe011.c b/regression/goto-instrument-wmm-core/ppc_safe011_RMO_OPT/safe011.c new file mode 100644 index 00000000000..12b40d0c72e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_RMO_OPT/safe011.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe011_RMO_OPT/test.desc new file mode 100644 index 00000000000..64d76ce361a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe011.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_SC_SAFE/safe011.c b/regression/goto-instrument-wmm-core/ppc_safe011_SC_SAFE/safe011.c new file mode 100644 index 00000000000..12b40d0c72e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_SC_SAFE/safe011.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe011_SC_SAFE/test.desc new file mode 100644 index 00000000000..b5dbee83ff0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_TSO_ALL/safe011.c b/regression/goto-instrument-wmm-core/ppc_safe011_TSO_ALL/safe011.c new file mode 100644 index 00000000000..12b40d0c72e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_TSO_ALL/safe011.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe011_TSO_ALL/test.desc new file mode 100644 index 00000000000..7d65fe43297 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_TSO_OPC/safe011.c b/regression/goto-instrument-wmm-core/ppc_safe011_TSO_OPC/safe011.c new file mode 100644 index 00000000000..12b40d0c72e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_TSO_OPC/safe011.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe011_TSO_OPC/test.desc new file mode 100644 index 00000000000..2f81a3802ee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_TSO_OPT/safe011.c b/regression/goto-instrument-wmm-core/ppc_safe011_TSO_OPT/safe011.c new file mode 100644 index 00000000000..12b40d0c72e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_TSO_OPT/safe011.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe011_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe011_TSO_OPT/test.desc new file mode 100644 index 00000000000..f97a17cdb1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe011_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe011.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_CAV11_ERROR/safe012.c b/regression/goto-instrument-wmm-core/ppc_safe012_CAV11_ERROR/safe012.c new file mode 100644 index 00000000000..71b5ff2c4a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_CAV11_ERROR/safe012.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe012_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..9ea0f9fa546 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe012.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_POWER_ALL/safe012.c b/regression/goto-instrument-wmm-core/ppc_safe012_POWER_ALL/safe012.c new file mode 100644 index 00000000000..71b5ff2c4a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_POWER_ALL/safe012.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe012_POWER_ALL/test.desc new file mode 100644 index 00000000000..071a266d653 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe012.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_POWER_OPC/safe012.c b/regression/goto-instrument-wmm-core/ppc_safe012_POWER_OPC/safe012.c new file mode 100644 index 00000000000..71b5ff2c4a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_POWER_OPC/safe012.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe012_POWER_OPC/test.desc new file mode 100644 index 00000000000..c58a901a442 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe012.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_POWER_OPT/safe012.c b/regression/goto-instrument-wmm-core/ppc_safe012_POWER_OPT/safe012.c new file mode 100644 index 00000000000..71b5ff2c4a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_POWER_OPT/safe012.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe012_POWER_OPT/test.desc new file mode 100644 index 00000000000..239410121cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe012.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_PSO_ALL/safe012.c b/regression/goto-instrument-wmm-core/ppc_safe012_PSO_ALL/safe012.c new file mode 100644 index 00000000000..71b5ff2c4a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_PSO_ALL/safe012.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe012_PSO_ALL/test.desc new file mode 100644 index 00000000000..cbf23f25f5a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe012.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_PSO_OPC/safe012.c b/regression/goto-instrument-wmm-core/ppc_safe012_PSO_OPC/safe012.c new file mode 100644 index 00000000000..71b5ff2c4a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_PSO_OPC/safe012.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe012_PSO_OPC/test.desc new file mode 100644 index 00000000000..da16d3784c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe012.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_PSO_OPT/safe012.c b/regression/goto-instrument-wmm-core/ppc_safe012_PSO_OPT/safe012.c new file mode 100644 index 00000000000..71b5ff2c4a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_PSO_OPT/safe012.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe012_PSO_OPT/test.desc new file mode 100644 index 00000000000..a44394ff0fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe012.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_RMO_ALL/safe012.c b/regression/goto-instrument-wmm-core/ppc_safe012_RMO_ALL/safe012.c new file mode 100644 index 00000000000..71b5ff2c4a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_RMO_ALL/safe012.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe012_RMO_ALL/test.desc new file mode 100644 index 00000000000..bea3b90178d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe012.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_RMO_OPC/safe012.c b/regression/goto-instrument-wmm-core/ppc_safe012_RMO_OPC/safe012.c new file mode 100644 index 00000000000..71b5ff2c4a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_RMO_OPC/safe012.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe012_RMO_OPC/test.desc new file mode 100644 index 00000000000..4783d940755 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe012.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_RMO_OPT/safe012.c b/regression/goto-instrument-wmm-core/ppc_safe012_RMO_OPT/safe012.c new file mode 100644 index 00000000000..71b5ff2c4a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_RMO_OPT/safe012.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe012_RMO_OPT/test.desc new file mode 100644 index 00000000000..38d845e8a66 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe012.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_SC_SAFE/safe012.c b/regression/goto-instrument-wmm-core/ppc_safe012_SC_SAFE/safe012.c new file mode 100644 index 00000000000..71b5ff2c4a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_SC_SAFE/safe012.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe012_SC_SAFE/test.desc new file mode 100644 index 00000000000..556a4c9f032 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe012.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_TSO_ALL/safe012.c b/regression/goto-instrument-wmm-core/ppc_safe012_TSO_ALL/safe012.c new file mode 100644 index 00000000000..71b5ff2c4a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_TSO_ALL/safe012.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe012_TSO_ALL/test.desc new file mode 100644 index 00000000000..b57cad10cc3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe012.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_TSO_OPC/safe012.c b/regression/goto-instrument-wmm-core/ppc_safe012_TSO_OPC/safe012.c new file mode 100644 index 00000000000..71b5ff2c4a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_TSO_OPC/safe012.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe012_TSO_OPC/test.desc new file mode 100644 index 00000000000..3c840adee2c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe012.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_TSO_OPT/safe012.c b/regression/goto-instrument-wmm-core/ppc_safe012_TSO_OPT/safe012.c new file mode 100644 index 00000000000..71b5ff2c4a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_TSO_OPT/safe012.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe012_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe012_TSO_OPT/test.desc new file mode 100644 index 00000000000..ad85c5758f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe012_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe012.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_CAV11_ERROR/safe013.c b/regression/goto-instrument-wmm-core/ppc_safe013_CAV11_ERROR/safe013.c new file mode 100644 index 00000000000..eed9a9e3f41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_CAV11_ERROR/safe013.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe013_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..4c5ec3f33f2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe013.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_POWER_ALL/safe013.c b/regression/goto-instrument-wmm-core/ppc_safe013_POWER_ALL/safe013.c new file mode 100644 index 00000000000..eed9a9e3f41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_POWER_ALL/safe013.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe013_POWER_ALL/test.desc new file mode 100644 index 00000000000..523e9ee6868 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe013.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_POWER_OPC/safe013.c b/regression/goto-instrument-wmm-core/ppc_safe013_POWER_OPC/safe013.c new file mode 100644 index 00000000000..eed9a9e3f41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_POWER_OPC/safe013.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe013_POWER_OPC/test.desc new file mode 100644 index 00000000000..07b3dfabd01 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe013.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_POWER_OPT/safe013.c b/regression/goto-instrument-wmm-core/ppc_safe013_POWER_OPT/safe013.c new file mode 100644 index 00000000000..eed9a9e3f41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_POWER_OPT/safe013.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe013_POWER_OPT/test.desc new file mode 100644 index 00000000000..f57bee4c765 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe013.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_PSO_ALL/safe013.c b/regression/goto-instrument-wmm-core/ppc_safe013_PSO_ALL/safe013.c new file mode 100644 index 00000000000..eed9a9e3f41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_PSO_ALL/safe013.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe013_PSO_ALL/test.desc new file mode 100644 index 00000000000..4485cd5c8c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe013.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_PSO_OPC/safe013.c b/regression/goto-instrument-wmm-core/ppc_safe013_PSO_OPC/safe013.c new file mode 100644 index 00000000000..eed9a9e3f41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_PSO_OPC/safe013.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe013_PSO_OPC/test.desc new file mode 100644 index 00000000000..5b9ad6f3d81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe013.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_PSO_OPT/safe013.c b/regression/goto-instrument-wmm-core/ppc_safe013_PSO_OPT/safe013.c new file mode 100644 index 00000000000..eed9a9e3f41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_PSO_OPT/safe013.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe013_PSO_OPT/test.desc new file mode 100644 index 00000000000..4bb1b413c75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe013.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_RMO_ALL/safe013.c b/regression/goto-instrument-wmm-core/ppc_safe013_RMO_ALL/safe013.c new file mode 100644 index 00000000000..eed9a9e3f41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_RMO_ALL/safe013.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe013_RMO_ALL/test.desc new file mode 100644 index 00000000000..2813f89dc25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe013.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_RMO_OPC/safe013.c b/regression/goto-instrument-wmm-core/ppc_safe013_RMO_OPC/safe013.c new file mode 100644 index 00000000000..eed9a9e3f41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_RMO_OPC/safe013.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe013_RMO_OPC/test.desc new file mode 100644 index 00000000000..4a37be8700c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe013.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_RMO_OPT/safe013.c b/regression/goto-instrument-wmm-core/ppc_safe013_RMO_OPT/safe013.c new file mode 100644 index 00000000000..eed9a9e3f41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_RMO_OPT/safe013.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe013_RMO_OPT/test.desc new file mode 100644 index 00000000000..fb3375623cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe013.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_SC_SAFE/safe013.c b/regression/goto-instrument-wmm-core/ppc_safe013_SC_SAFE/safe013.c new file mode 100644 index 00000000000..eed9a9e3f41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_SC_SAFE/safe013.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe013_SC_SAFE/test.desc new file mode 100644 index 00000000000..0c9707fa628 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe013.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_TSO_ALL/safe013.c b/regression/goto-instrument-wmm-core/ppc_safe013_TSO_ALL/safe013.c new file mode 100644 index 00000000000..eed9a9e3f41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_TSO_ALL/safe013.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe013_TSO_ALL/test.desc new file mode 100644 index 00000000000..335ee6e841a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe013.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_TSO_OPC/safe013.c b/regression/goto-instrument-wmm-core/ppc_safe013_TSO_OPC/safe013.c new file mode 100644 index 00000000000..eed9a9e3f41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_TSO_OPC/safe013.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe013_TSO_OPC/test.desc new file mode 100644 index 00000000000..9faee213dec --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe013.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_TSO_OPT/safe013.c b/regression/goto-instrument-wmm-core/ppc_safe013_TSO_OPT/safe013.c new file mode 100644 index 00000000000..eed9a9e3f41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_TSO_OPT/safe013.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe013_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe013_TSO_OPT/test.desc new file mode 100644 index 00000000000..e056d35390d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe013_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe013.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_CAV11_ERROR/safe014.c b/regression/goto-instrument-wmm-core/ppc_safe014_CAV11_ERROR/safe014.c new file mode 100644 index 00000000000..012b5eb96f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_CAV11_ERROR/safe014.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe014_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..cc067d8d422 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_POWER_ALL/safe014.c b/regression/goto-instrument-wmm-core/ppc_safe014_POWER_ALL/safe014.c new file mode 100644 index 00000000000..012b5eb96f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_POWER_ALL/safe014.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe014_POWER_ALL/test.desc new file mode 100644 index 00000000000..56edfaaf3f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_POWER_OPC/safe014.c b/regression/goto-instrument-wmm-core/ppc_safe014_POWER_OPC/safe014.c new file mode 100644 index 00000000000..012b5eb96f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_POWER_OPC/safe014.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe014_POWER_OPC/test.desc new file mode 100644 index 00000000000..9931f6d4ebf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_POWER_OPT/safe014.c b/regression/goto-instrument-wmm-core/ppc_safe014_POWER_OPT/safe014.c new file mode 100644 index 00000000000..012b5eb96f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_POWER_OPT/safe014.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe014_POWER_OPT/test.desc new file mode 100644 index 00000000000..f419653ba9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe014.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_PSO_ALL/safe014.c b/regression/goto-instrument-wmm-core/ppc_safe014_PSO_ALL/safe014.c new file mode 100644 index 00000000000..012b5eb96f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_PSO_ALL/safe014.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe014_PSO_ALL/test.desc new file mode 100644 index 00000000000..9f680c9e76d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_PSO_OPC/safe014.c b/regression/goto-instrument-wmm-core/ppc_safe014_PSO_OPC/safe014.c new file mode 100644 index 00000000000..012b5eb96f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_PSO_OPC/safe014.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe014_PSO_OPC/test.desc new file mode 100644 index 00000000000..be51f111783 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_PSO_OPT/safe014.c b/regression/goto-instrument-wmm-core/ppc_safe014_PSO_OPT/safe014.c new file mode 100644 index 00000000000..012b5eb96f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_PSO_OPT/safe014.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe014_PSO_OPT/test.desc new file mode 100644 index 00000000000..bef1655ad77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe014.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_RMO_ALL/safe014.c b/regression/goto-instrument-wmm-core/ppc_safe014_RMO_ALL/safe014.c new file mode 100644 index 00000000000..012b5eb96f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_RMO_ALL/safe014.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe014_RMO_ALL/test.desc new file mode 100644 index 00000000000..9d6e00b7be8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_RMO_OPC/safe014.c b/regression/goto-instrument-wmm-core/ppc_safe014_RMO_OPC/safe014.c new file mode 100644 index 00000000000..012b5eb96f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_RMO_OPC/safe014.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe014_RMO_OPC/test.desc new file mode 100644 index 00000000000..f72885a0ffb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_RMO_OPT/safe014.c b/regression/goto-instrument-wmm-core/ppc_safe014_RMO_OPT/safe014.c new file mode 100644 index 00000000000..012b5eb96f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_RMO_OPT/safe014.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe014_RMO_OPT/test.desc new file mode 100644 index 00000000000..1f522db62c9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe014.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_SC_SAFE/safe014.c b/regression/goto-instrument-wmm-core/ppc_safe014_SC_SAFE/safe014.c new file mode 100644 index 00000000000..012b5eb96f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_SC_SAFE/safe014.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe014_SC_SAFE/test.desc new file mode 100644 index 00000000000..17bd1b3afce --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_TSO_ALL/safe014.c b/regression/goto-instrument-wmm-core/ppc_safe014_TSO_ALL/safe014.c new file mode 100644 index 00000000000..012b5eb96f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_TSO_ALL/safe014.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe014_TSO_ALL/test.desc new file mode 100644 index 00000000000..958d97d53d3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_TSO_OPC/safe014.c b/regression/goto-instrument-wmm-core/ppc_safe014_TSO_OPC/safe014.c new file mode 100644 index 00000000000..012b5eb96f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_TSO_OPC/safe014.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe014_TSO_OPC/test.desc new file mode 100644 index 00000000000..7dcdfa0d572 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_TSO_OPT/safe014.c b/regression/goto-instrument-wmm-core/ppc_safe014_TSO_OPT/safe014.c new file mode 100644 index 00000000000..012b5eb96f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_TSO_OPT/safe014.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe014_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe014_TSO_OPT/test.desc new file mode 100644 index 00000000000..109d05ff8b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe014_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe014.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_CAV11_ERROR/safe015.c b/regression/goto-instrument-wmm-core/ppc_safe015_CAV11_ERROR/safe015.c new file mode 100644 index 00000000000..203da0c2e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_CAV11_ERROR/safe015.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe015_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..33cfce731b5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_POWER_ALL/safe015.c b/regression/goto-instrument-wmm-core/ppc_safe015_POWER_ALL/safe015.c new file mode 100644 index 00000000000..203da0c2e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_POWER_ALL/safe015.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe015_POWER_ALL/test.desc new file mode 100644 index 00000000000..12f6ded1adc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_POWER_OPC/safe015.c b/regression/goto-instrument-wmm-core/ppc_safe015_POWER_OPC/safe015.c new file mode 100644 index 00000000000..203da0c2e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_POWER_OPC/safe015.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe015_POWER_OPC/test.desc new file mode 100644 index 00000000000..b2496bdcbed --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_POWER_OPT/safe015.c b/regression/goto-instrument-wmm-core/ppc_safe015_POWER_OPT/safe015.c new file mode 100644 index 00000000000..203da0c2e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_POWER_OPT/safe015.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe015_POWER_OPT/test.desc new file mode 100644 index 00000000000..a0feabb7f93 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe015.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_PSO_ALL/safe015.c b/regression/goto-instrument-wmm-core/ppc_safe015_PSO_ALL/safe015.c new file mode 100644 index 00000000000..203da0c2e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_PSO_ALL/safe015.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe015_PSO_ALL/test.desc new file mode 100644 index 00000000000..fab66b04aca --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_PSO_OPC/safe015.c b/regression/goto-instrument-wmm-core/ppc_safe015_PSO_OPC/safe015.c new file mode 100644 index 00000000000..203da0c2e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_PSO_OPC/safe015.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe015_PSO_OPC/test.desc new file mode 100644 index 00000000000..2fcc9a43c48 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_PSO_OPT/safe015.c b/regression/goto-instrument-wmm-core/ppc_safe015_PSO_OPT/safe015.c new file mode 100644 index 00000000000..203da0c2e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_PSO_OPT/safe015.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe015_PSO_OPT/test.desc new file mode 100644 index 00000000000..ec87d279723 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe015.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_RMO_ALL/safe015.c b/regression/goto-instrument-wmm-core/ppc_safe015_RMO_ALL/safe015.c new file mode 100644 index 00000000000..203da0c2e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_RMO_ALL/safe015.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe015_RMO_ALL/test.desc new file mode 100644 index 00000000000..dc838833953 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_RMO_OPC/safe015.c b/regression/goto-instrument-wmm-core/ppc_safe015_RMO_OPC/safe015.c new file mode 100644 index 00000000000..203da0c2e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_RMO_OPC/safe015.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe015_RMO_OPC/test.desc new file mode 100644 index 00000000000..36e869762be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_RMO_OPT/safe015.c b/regression/goto-instrument-wmm-core/ppc_safe015_RMO_OPT/safe015.c new file mode 100644 index 00000000000..203da0c2e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_RMO_OPT/safe015.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe015_RMO_OPT/test.desc new file mode 100644 index 00000000000..9e61d81dcb2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe015.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_SC_SAFE/safe015.c b/regression/goto-instrument-wmm-core/ppc_safe015_SC_SAFE/safe015.c new file mode 100644 index 00000000000..203da0c2e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_SC_SAFE/safe015.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe015_SC_SAFE/test.desc new file mode 100644 index 00000000000..d5c556c62a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_TSO_ALL/safe015.c b/regression/goto-instrument-wmm-core/ppc_safe015_TSO_ALL/safe015.c new file mode 100644 index 00000000000..203da0c2e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_TSO_ALL/safe015.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe015_TSO_ALL/test.desc new file mode 100644 index 00000000000..255453965be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_TSO_OPC/safe015.c b/regression/goto-instrument-wmm-core/ppc_safe015_TSO_OPC/safe015.c new file mode 100644 index 00000000000..203da0c2e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_TSO_OPC/safe015.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe015_TSO_OPC/test.desc new file mode 100644 index 00000000000..ff0e75c9fee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_TSO_OPT/safe015.c b/regression/goto-instrument-wmm-core/ppc_safe015_TSO_OPT/safe015.c new file mode 100644 index 00000000000..203da0c2e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_TSO_OPT/safe015.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe015_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe015_TSO_OPT/test.desc new file mode 100644 index 00000000000..ed347c96452 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe015_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe015.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_CAV11_ERROR/safe016.c b/regression/goto-instrument-wmm-core/ppc_safe016_CAV11_ERROR/safe016.c new file mode 100644 index 00000000000..64fe1068dc0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_CAV11_ERROR/safe016.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe016_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..4ca369b3c36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_POWER_ALL/safe016.c b/regression/goto-instrument-wmm-core/ppc_safe016_POWER_ALL/safe016.c new file mode 100644 index 00000000000..64fe1068dc0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_POWER_ALL/safe016.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe016_POWER_ALL/test.desc new file mode 100644 index 00000000000..ecb2df7edc1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_POWER_OPC/safe016.c b/regression/goto-instrument-wmm-core/ppc_safe016_POWER_OPC/safe016.c new file mode 100644 index 00000000000..64fe1068dc0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_POWER_OPC/safe016.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe016_POWER_OPC/test.desc new file mode 100644 index 00000000000..5ae82ddba53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_POWER_OPT/safe016.c b/regression/goto-instrument-wmm-core/ppc_safe016_POWER_OPT/safe016.c new file mode 100644 index 00000000000..64fe1068dc0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_POWER_OPT/safe016.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe016_POWER_OPT/test.desc new file mode 100644 index 00000000000..f77e16e8f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe016.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_PSO_ALL/safe016.c b/regression/goto-instrument-wmm-core/ppc_safe016_PSO_ALL/safe016.c new file mode 100644 index 00000000000..64fe1068dc0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_PSO_ALL/safe016.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe016_PSO_ALL/test.desc new file mode 100644 index 00000000000..dd5ffaac848 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_PSO_OPC/safe016.c b/regression/goto-instrument-wmm-core/ppc_safe016_PSO_OPC/safe016.c new file mode 100644 index 00000000000..64fe1068dc0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_PSO_OPC/safe016.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe016_PSO_OPC/test.desc new file mode 100644 index 00000000000..7d271dac287 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_PSO_OPT/safe016.c b/regression/goto-instrument-wmm-core/ppc_safe016_PSO_OPT/safe016.c new file mode 100644 index 00000000000..64fe1068dc0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_PSO_OPT/safe016.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe016_PSO_OPT/test.desc new file mode 100644 index 00000000000..b872cd11f0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe016.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_RMO_ALL/safe016.c b/regression/goto-instrument-wmm-core/ppc_safe016_RMO_ALL/safe016.c new file mode 100644 index 00000000000..64fe1068dc0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_RMO_ALL/safe016.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe016_RMO_ALL/test.desc new file mode 100644 index 00000000000..8ebe2425af6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_RMO_OPC/safe016.c b/regression/goto-instrument-wmm-core/ppc_safe016_RMO_OPC/safe016.c new file mode 100644 index 00000000000..64fe1068dc0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_RMO_OPC/safe016.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe016_RMO_OPC/test.desc new file mode 100644 index 00000000000..cbf66a0378f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_RMO_OPT/safe016.c b/regression/goto-instrument-wmm-core/ppc_safe016_RMO_OPT/safe016.c new file mode 100644 index 00000000000..64fe1068dc0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_RMO_OPT/safe016.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe016_RMO_OPT/test.desc new file mode 100644 index 00000000000..05a7e30ef91 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe016.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_SC_SAFE/safe016.c b/regression/goto-instrument-wmm-core/ppc_safe016_SC_SAFE/safe016.c new file mode 100644 index 00000000000..64fe1068dc0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_SC_SAFE/safe016.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe016_SC_SAFE/test.desc new file mode 100644 index 00000000000..1787de06c1f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_TSO_ALL/safe016.c b/regression/goto-instrument-wmm-core/ppc_safe016_TSO_ALL/safe016.c new file mode 100644 index 00000000000..64fe1068dc0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_TSO_ALL/safe016.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe016_TSO_ALL/test.desc new file mode 100644 index 00000000000..0eab719c206 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_TSO_OPC/safe016.c b/regression/goto-instrument-wmm-core/ppc_safe016_TSO_OPC/safe016.c new file mode 100644 index 00000000000..64fe1068dc0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_TSO_OPC/safe016.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe016_TSO_OPC/test.desc new file mode 100644 index 00000000000..6612b688803 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_TSO_OPT/safe016.c b/regression/goto-instrument-wmm-core/ppc_safe016_TSO_OPT/safe016.c new file mode 100644 index 00000000000..64fe1068dc0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_TSO_OPT/safe016.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe016_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe016_TSO_OPT/test.desc new file mode 100644 index 00000000000..9212712263d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe016_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe016.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_CAV11_ERROR/safe017.c b/regression/goto-instrument-wmm-core/ppc_safe017_CAV11_ERROR/safe017.c new file mode 100644 index 00000000000..ce3b107f723 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_CAV11_ERROR/safe017.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe017_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..32532e10a12 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_POWER_ALL/safe017.c b/regression/goto-instrument-wmm-core/ppc_safe017_POWER_ALL/safe017.c new file mode 100644 index 00000000000..ce3b107f723 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_POWER_ALL/safe017.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe017_POWER_ALL/test.desc new file mode 100644 index 00000000000..186a1b99f59 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_POWER_OPC/safe017.c b/regression/goto-instrument-wmm-core/ppc_safe017_POWER_OPC/safe017.c new file mode 100644 index 00000000000..ce3b107f723 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_POWER_OPC/safe017.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe017_POWER_OPC/test.desc new file mode 100644 index 00000000000..92d69da20cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_POWER_OPT/safe017.c b/regression/goto-instrument-wmm-core/ppc_safe017_POWER_OPT/safe017.c new file mode 100644 index 00000000000..ce3b107f723 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_POWER_OPT/safe017.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe017_POWER_OPT/test.desc new file mode 100644 index 00000000000..c1362e1d267 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe017.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_PSO_ALL/safe017.c b/regression/goto-instrument-wmm-core/ppc_safe017_PSO_ALL/safe017.c new file mode 100644 index 00000000000..ce3b107f723 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_PSO_ALL/safe017.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe017_PSO_ALL/test.desc new file mode 100644 index 00000000000..4cd29aef57d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_PSO_OPC/safe017.c b/regression/goto-instrument-wmm-core/ppc_safe017_PSO_OPC/safe017.c new file mode 100644 index 00000000000..ce3b107f723 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_PSO_OPC/safe017.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe017_PSO_OPC/test.desc new file mode 100644 index 00000000000..736d5c00a05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_PSO_OPT/safe017.c b/regression/goto-instrument-wmm-core/ppc_safe017_PSO_OPT/safe017.c new file mode 100644 index 00000000000..ce3b107f723 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_PSO_OPT/safe017.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe017_PSO_OPT/test.desc new file mode 100644 index 00000000000..1013ed740c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe017.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_RMO_ALL/safe017.c b/regression/goto-instrument-wmm-core/ppc_safe017_RMO_ALL/safe017.c new file mode 100644 index 00000000000..ce3b107f723 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_RMO_ALL/safe017.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe017_RMO_ALL/test.desc new file mode 100644 index 00000000000..9c818ecc421 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_RMO_OPC/safe017.c b/regression/goto-instrument-wmm-core/ppc_safe017_RMO_OPC/safe017.c new file mode 100644 index 00000000000..ce3b107f723 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_RMO_OPC/safe017.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe017_RMO_OPC/test.desc new file mode 100644 index 00000000000..4bb544e207f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_RMO_OPT/safe017.c b/regression/goto-instrument-wmm-core/ppc_safe017_RMO_OPT/safe017.c new file mode 100644 index 00000000000..ce3b107f723 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_RMO_OPT/safe017.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe017_RMO_OPT/test.desc new file mode 100644 index 00000000000..8efc382663f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe017.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_SC_SAFE/safe017.c b/regression/goto-instrument-wmm-core/ppc_safe017_SC_SAFE/safe017.c new file mode 100644 index 00000000000..ce3b107f723 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_SC_SAFE/safe017.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe017_SC_SAFE/test.desc new file mode 100644 index 00000000000..2f56581ab58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_TSO_ALL/safe017.c b/regression/goto-instrument-wmm-core/ppc_safe017_TSO_ALL/safe017.c new file mode 100644 index 00000000000..ce3b107f723 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_TSO_ALL/safe017.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe017_TSO_ALL/test.desc new file mode 100644 index 00000000000..886f4a4160a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_TSO_OPC/safe017.c b/regression/goto-instrument-wmm-core/ppc_safe017_TSO_OPC/safe017.c new file mode 100644 index 00000000000..ce3b107f723 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_TSO_OPC/safe017.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe017_TSO_OPC/test.desc new file mode 100644 index 00000000000..2ba2cca1b67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_TSO_OPT/safe017.c b/regression/goto-instrument-wmm-core/ppc_safe017_TSO_OPT/safe017.c new file mode 100644 index 00000000000..ce3b107f723 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_TSO_OPT/safe017.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe017_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe017_TSO_OPT/test.desc new file mode 100644 index 00000000000..a799b931706 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe017_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe017.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_CAV11_ERROR/safe018.c b/regression/goto-instrument-wmm-core/ppc_safe018_CAV11_ERROR/safe018.c new file mode 100644 index 00000000000..d066e4cec1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_CAV11_ERROR/safe018.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe018_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..6260f36beb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_POWER_ALL/safe018.c b/regression/goto-instrument-wmm-core/ppc_safe018_POWER_ALL/safe018.c new file mode 100644 index 00000000000..d066e4cec1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_POWER_ALL/safe018.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe018_POWER_ALL/test.desc new file mode 100644 index 00000000000..913bcb34e65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_POWER_OPC/safe018.c b/regression/goto-instrument-wmm-core/ppc_safe018_POWER_OPC/safe018.c new file mode 100644 index 00000000000..d066e4cec1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_POWER_OPC/safe018.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe018_POWER_OPC/test.desc new file mode 100644 index 00000000000..111f4edb196 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_POWER_OPT/safe018.c b/regression/goto-instrument-wmm-core/ppc_safe018_POWER_OPT/safe018.c new file mode 100644 index 00000000000..d066e4cec1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_POWER_OPT/safe018.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe018_POWER_OPT/test.desc new file mode 100644 index 00000000000..f05654d78ab --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe018.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_PSO_ALL/safe018.c b/regression/goto-instrument-wmm-core/ppc_safe018_PSO_ALL/safe018.c new file mode 100644 index 00000000000..d066e4cec1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_PSO_ALL/safe018.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe018_PSO_ALL/test.desc new file mode 100644 index 00000000000..e4b883d28e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_PSO_OPC/safe018.c b/regression/goto-instrument-wmm-core/ppc_safe018_PSO_OPC/safe018.c new file mode 100644 index 00000000000..d066e4cec1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_PSO_OPC/safe018.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe018_PSO_OPC/test.desc new file mode 100644 index 00000000000..3dc627399b6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_PSO_OPT/safe018.c b/regression/goto-instrument-wmm-core/ppc_safe018_PSO_OPT/safe018.c new file mode 100644 index 00000000000..d066e4cec1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_PSO_OPT/safe018.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe018_PSO_OPT/test.desc new file mode 100644 index 00000000000..4018506f6c5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe018.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_RMO_ALL/safe018.c b/regression/goto-instrument-wmm-core/ppc_safe018_RMO_ALL/safe018.c new file mode 100644 index 00000000000..d066e4cec1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_RMO_ALL/safe018.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe018_RMO_ALL/test.desc new file mode 100644 index 00000000000..437e71cd64f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_RMO_OPC/safe018.c b/regression/goto-instrument-wmm-core/ppc_safe018_RMO_OPC/safe018.c new file mode 100644 index 00000000000..d066e4cec1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_RMO_OPC/safe018.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe018_RMO_OPC/test.desc new file mode 100644 index 00000000000..809b9071f2c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_RMO_OPT/safe018.c b/regression/goto-instrument-wmm-core/ppc_safe018_RMO_OPT/safe018.c new file mode 100644 index 00000000000..d066e4cec1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_RMO_OPT/safe018.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe018_RMO_OPT/test.desc new file mode 100644 index 00000000000..2d4f167a5a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe018.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_SC_SAFE/safe018.c b/regression/goto-instrument-wmm-core/ppc_safe018_SC_SAFE/safe018.c new file mode 100644 index 00000000000..d066e4cec1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_SC_SAFE/safe018.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe018_SC_SAFE/test.desc new file mode 100644 index 00000000000..ce6c73fac65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_TSO_ALL/safe018.c b/regression/goto-instrument-wmm-core/ppc_safe018_TSO_ALL/safe018.c new file mode 100644 index 00000000000..d066e4cec1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_TSO_ALL/safe018.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe018_TSO_ALL/test.desc new file mode 100644 index 00000000000..cc8bcadd160 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_TSO_OPC/safe018.c b/regression/goto-instrument-wmm-core/ppc_safe018_TSO_OPC/safe018.c new file mode 100644 index 00000000000..d066e4cec1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_TSO_OPC/safe018.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe018_TSO_OPC/test.desc new file mode 100644 index 00000000000..180da74c8f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_TSO_OPT/safe018.c b/regression/goto-instrument-wmm-core/ppc_safe018_TSO_OPT/safe018.c new file mode 100644 index 00000000000..d066e4cec1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_TSO_OPT/safe018.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe018_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe018_TSO_OPT/test.desc new file mode 100644 index 00000000000..ddb7a07a111 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe018_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe018.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_CAV11_ERROR/safe019.c b/regression/goto-instrument-wmm-core/ppc_safe019_CAV11_ERROR/safe019.c new file mode 100644 index 00000000000..ddfc36f8f2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_CAV11_ERROR/safe019.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe019_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..d8213751097 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe019.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_POWER_ALL/safe019.c b/regression/goto-instrument-wmm-core/ppc_safe019_POWER_ALL/safe019.c new file mode 100644 index 00000000000..ddfc36f8f2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_POWER_ALL/safe019.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe019_POWER_ALL/test.desc new file mode 100644 index 00000000000..0d333ae62bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe019.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_POWER_OPC/safe019.c b/regression/goto-instrument-wmm-core/ppc_safe019_POWER_OPC/safe019.c new file mode 100644 index 00000000000..ddfc36f8f2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_POWER_OPC/safe019.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe019_POWER_OPC/test.desc new file mode 100644 index 00000000000..cfc6201ff45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe019.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe019_POWER_OPT/test.desc index 1dfe45ffb7f..418b21bab21 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe019_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe019_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe019.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_PSO_ALL/safe019.c b/regression/goto-instrument-wmm-core/ppc_safe019_PSO_ALL/safe019.c new file mode 100644 index 00000000000..ddfc36f8f2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_PSO_ALL/safe019.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe019_PSO_ALL/test.desc new file mode 100644 index 00000000000..89da34eb528 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe019.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_PSO_OPC/safe019.c b/regression/goto-instrument-wmm-core/ppc_safe019_PSO_OPC/safe019.c new file mode 100644 index 00000000000..ddfc36f8f2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_PSO_OPC/safe019.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe019_PSO_OPC/test.desc new file mode 100644 index 00000000000..31b106b3616 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe019.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_PSO_OPT/safe019.c b/regression/goto-instrument-wmm-core/ppc_safe019_PSO_OPT/safe019.c new file mode 100644 index 00000000000..ddfc36f8f2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_PSO_OPT/safe019.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe019_PSO_OPT/test.desc new file mode 100644 index 00000000000..368a9055463 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe019.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_RMO_ALL/safe019.c b/regression/goto-instrument-wmm-core/ppc_safe019_RMO_ALL/safe019.c new file mode 100644 index 00000000000..ddfc36f8f2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_RMO_ALL/safe019.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe019_RMO_ALL/test.desc new file mode 100644 index 00000000000..1a9c382a847 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe019.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_RMO_OPC/safe019.c b/regression/goto-instrument-wmm-core/ppc_safe019_RMO_OPC/safe019.c new file mode 100644 index 00000000000..ddfc36f8f2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_RMO_OPC/safe019.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe019_RMO_OPC/test.desc new file mode 100644 index 00000000000..aa9c1da62ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe019.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_RMO_OPT/safe019.c b/regression/goto-instrument-wmm-core/ppc_safe019_RMO_OPT/safe019.c new file mode 100644 index 00000000000..ddfc36f8f2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_RMO_OPT/safe019.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe019_RMO_OPT/test.desc new file mode 100644 index 00000000000..5c6362e9023 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe019.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_SC_SAFE/safe019.c b/regression/goto-instrument-wmm-core/ppc_safe019_SC_SAFE/safe019.c new file mode 100644 index 00000000000..ddfc36f8f2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_SC_SAFE/safe019.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe019_SC_SAFE/test.desc new file mode 100644 index 00000000000..ff91e848e36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe019.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_TSO_ALL/safe019.c b/regression/goto-instrument-wmm-core/ppc_safe019_TSO_ALL/safe019.c new file mode 100644 index 00000000000..ddfc36f8f2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_TSO_ALL/safe019.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe019_TSO_ALL/test.desc new file mode 100644 index 00000000000..53f70e2fe1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe019.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_TSO_OPC/safe019.c b/regression/goto-instrument-wmm-core/ppc_safe019_TSO_OPC/safe019.c new file mode 100644 index 00000000000..ddfc36f8f2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_TSO_OPC/safe019.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe019_TSO_OPC/test.desc new file mode 100644 index 00000000000..daf1ac4da9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe019.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_TSO_OPT/safe019.c b/regression/goto-instrument-wmm-core/ppc_safe019_TSO_OPT/safe019.c new file mode 100644 index 00000000000..ddfc36f8f2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_TSO_OPT/safe019.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe019_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe019_TSO_OPT/test.desc new file mode 100644 index 00000000000..7e1629b7555 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe019_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe019.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_CAV11_ERROR/safe020.c b/regression/goto-instrument-wmm-core/ppc_safe020_CAV11_ERROR/safe020.c new file mode 100644 index 00000000000..52c7a8a8b06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_CAV11_ERROR/safe020.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe020_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..b91229638a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe020.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_POWER_ALL/safe020.c b/regression/goto-instrument-wmm-core/ppc_safe020_POWER_ALL/safe020.c new file mode 100644 index 00000000000..52c7a8a8b06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_POWER_ALL/safe020.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe020_POWER_ALL/test.desc new file mode 100644 index 00000000000..0a5fa81f2c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe020.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_POWER_OPC/safe020.c b/regression/goto-instrument-wmm-core/ppc_safe020_POWER_OPC/safe020.c new file mode 100644 index 00000000000..52c7a8a8b06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_POWER_OPC/safe020.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe020_POWER_OPC/test.desc new file mode 100644 index 00000000000..f3004984714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe020.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_POWER_OPT/safe020.c b/regression/goto-instrument-wmm-core/ppc_safe020_POWER_OPT/safe020.c new file mode 100644 index 00000000000..52c7a8a8b06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_POWER_OPT/safe020.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe020_POWER_OPT/test.desc new file mode 100644 index 00000000000..62a43f6eaa9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe020.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_PSO_ALL/safe020.c b/regression/goto-instrument-wmm-core/ppc_safe020_PSO_ALL/safe020.c new file mode 100644 index 00000000000..52c7a8a8b06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_PSO_ALL/safe020.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe020_PSO_ALL/test.desc new file mode 100644 index 00000000000..ee530461f56 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe020.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_PSO_OPC/safe020.c b/regression/goto-instrument-wmm-core/ppc_safe020_PSO_OPC/safe020.c new file mode 100644 index 00000000000..52c7a8a8b06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_PSO_OPC/safe020.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe020_PSO_OPC/test.desc new file mode 100644 index 00000000000..6b747a3cabd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe020.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_PSO_OPT/safe020.c b/regression/goto-instrument-wmm-core/ppc_safe020_PSO_OPT/safe020.c new file mode 100644 index 00000000000..52c7a8a8b06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_PSO_OPT/safe020.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe020_PSO_OPT/test.desc new file mode 100644 index 00000000000..49ac620403a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe020.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_RMO_ALL/safe020.c b/regression/goto-instrument-wmm-core/ppc_safe020_RMO_ALL/safe020.c new file mode 100644 index 00000000000..52c7a8a8b06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_RMO_ALL/safe020.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe020_RMO_ALL/test.desc new file mode 100644 index 00000000000..7d6f562d8ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe020.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_RMO_OPC/safe020.c b/regression/goto-instrument-wmm-core/ppc_safe020_RMO_OPC/safe020.c new file mode 100644 index 00000000000..52c7a8a8b06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_RMO_OPC/safe020.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe020_RMO_OPC/test.desc new file mode 100644 index 00000000000..503c915b2d7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe020.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_RMO_OPT/safe020.c b/regression/goto-instrument-wmm-core/ppc_safe020_RMO_OPT/safe020.c new file mode 100644 index 00000000000..52c7a8a8b06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_RMO_OPT/safe020.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe020_RMO_OPT/test.desc new file mode 100644 index 00000000000..c3970f743a9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe020.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_SC_SAFE/safe020.c b/regression/goto-instrument-wmm-core/ppc_safe020_SC_SAFE/safe020.c new file mode 100644 index 00000000000..52c7a8a8b06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_SC_SAFE/safe020.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe020_SC_SAFE/test.desc new file mode 100644 index 00000000000..1ba35fddb27 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe020.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_TSO_ALL/safe020.c b/regression/goto-instrument-wmm-core/ppc_safe020_TSO_ALL/safe020.c new file mode 100644 index 00000000000..52c7a8a8b06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_TSO_ALL/safe020.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe020_TSO_ALL/test.desc new file mode 100644 index 00000000000..6a2c65ec248 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe020.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_TSO_OPC/safe020.c b/regression/goto-instrument-wmm-core/ppc_safe020_TSO_OPC/safe020.c new file mode 100644 index 00000000000..52c7a8a8b06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_TSO_OPC/safe020.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe020_TSO_OPC/test.desc new file mode 100644 index 00000000000..1f871736e97 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe020.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_TSO_OPT/safe020.c b/regression/goto-instrument-wmm-core/ppc_safe020_TSO_OPT/safe020.c new file mode 100644 index 00000000000..52c7a8a8b06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_TSO_OPT/safe020.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe020_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe020_TSO_OPT/test.desc new file mode 100644 index 00000000000..ea924cb2e6f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe020_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe020.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_CAV11_ERROR/safe021.c b/regression/goto-instrument-wmm-core/ppc_safe021_CAV11_ERROR/safe021.c new file mode 100644 index 00000000000..78319ab9ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_CAV11_ERROR/safe021.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe021_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..8d82df32225 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe021.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_POWER_ALL/safe021.c b/regression/goto-instrument-wmm-core/ppc_safe021_POWER_ALL/safe021.c new file mode 100644 index 00000000000..78319ab9ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_POWER_ALL/safe021.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe021_POWER_ALL/test.desc new file mode 100644 index 00000000000..dcf93ea24cc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe021.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_POWER_OPC/safe021.c b/regression/goto-instrument-wmm-core/ppc_safe021_POWER_OPC/safe021.c new file mode 100644 index 00000000000..78319ab9ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_POWER_OPC/safe021.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe021_POWER_OPC/test.desc new file mode 100644 index 00000000000..ef7d5a02cea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe021.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_POWER_OPT/safe021.c b/regression/goto-instrument-wmm-core/ppc_safe021_POWER_OPT/safe021.c new file mode 100644 index 00000000000..78319ab9ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_POWER_OPT/safe021.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe021_POWER_OPT/test.desc new file mode 100644 index 00000000000..32c7748d914 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe021.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_PSO_ALL/safe021.c b/regression/goto-instrument-wmm-core/ppc_safe021_PSO_ALL/safe021.c new file mode 100644 index 00000000000..78319ab9ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_PSO_ALL/safe021.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe021_PSO_ALL/test.desc new file mode 100644 index 00000000000..6e87f5b2e8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe021.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_PSO_OPC/safe021.c b/regression/goto-instrument-wmm-core/ppc_safe021_PSO_OPC/safe021.c new file mode 100644 index 00000000000..78319ab9ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_PSO_OPC/safe021.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe021_PSO_OPC/test.desc new file mode 100644 index 00000000000..f7d41669caa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe021.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_PSO_OPT/safe021.c b/regression/goto-instrument-wmm-core/ppc_safe021_PSO_OPT/safe021.c new file mode 100644 index 00000000000..78319ab9ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_PSO_OPT/safe021.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe021_PSO_OPT/test.desc new file mode 100644 index 00000000000..b411271632b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe021.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_RMO_ALL/safe021.c b/regression/goto-instrument-wmm-core/ppc_safe021_RMO_ALL/safe021.c new file mode 100644 index 00000000000..78319ab9ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_RMO_ALL/safe021.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe021_RMO_ALL/test.desc new file mode 100644 index 00000000000..655d7fcc801 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe021.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_RMO_OPC/safe021.c b/regression/goto-instrument-wmm-core/ppc_safe021_RMO_OPC/safe021.c new file mode 100644 index 00000000000..78319ab9ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_RMO_OPC/safe021.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe021_RMO_OPC/test.desc new file mode 100644 index 00000000000..d176d0d5d26 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe021.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_RMO_OPT/safe021.c b/regression/goto-instrument-wmm-core/ppc_safe021_RMO_OPT/safe021.c new file mode 100644 index 00000000000..78319ab9ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_RMO_OPT/safe021.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe021_RMO_OPT/test.desc new file mode 100644 index 00000000000..2f80fd23eb4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe021.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_SC_SAFE/safe021.c b/regression/goto-instrument-wmm-core/ppc_safe021_SC_SAFE/safe021.c new file mode 100644 index 00000000000..78319ab9ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_SC_SAFE/safe021.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe021_SC_SAFE/test.desc new file mode 100644 index 00000000000..622c5b53182 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe021.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_TSO_ALL/safe021.c b/regression/goto-instrument-wmm-core/ppc_safe021_TSO_ALL/safe021.c new file mode 100644 index 00000000000..78319ab9ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_TSO_ALL/safe021.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe021_TSO_ALL/test.desc new file mode 100644 index 00000000000..3c92a4c5c76 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe021.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_TSO_OPC/safe021.c b/regression/goto-instrument-wmm-core/ppc_safe021_TSO_OPC/safe021.c new file mode 100644 index 00000000000..78319ab9ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_TSO_OPC/safe021.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe021_TSO_OPC/test.desc new file mode 100644 index 00000000000..7641127da4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe021.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_TSO_OPT/safe021.c b/regression/goto-instrument-wmm-core/ppc_safe021_TSO_OPT/safe021.c new file mode 100644 index 00000000000..78319ab9ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_TSO_OPT/safe021.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe021_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe021_TSO_OPT/test.desc new file mode 100644 index 00000000000..56cc9d26a9d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe021_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe021.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_CAV11_ERROR/safe022.c b/regression/goto-instrument-wmm-core/ppc_safe022_CAV11_ERROR/safe022.c new file mode 100644 index 00000000000..a5ce76336e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_CAV11_ERROR/safe022.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe022_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..d2f018b4468 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_POWER_ALL/safe022.c b/regression/goto-instrument-wmm-core/ppc_safe022_POWER_ALL/safe022.c new file mode 100644 index 00000000000..a5ce76336e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_POWER_ALL/safe022.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe022_POWER_ALL/test.desc new file mode 100644 index 00000000000..a66a2f1be76 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_POWER_OPC/safe022.c b/regression/goto-instrument-wmm-core/ppc_safe022_POWER_OPC/safe022.c new file mode 100644 index 00000000000..a5ce76336e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_POWER_OPC/safe022.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe022_POWER_OPC/test.desc new file mode 100644 index 00000000000..daf0a8cfb23 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_POWER_OPT/safe022.c b/regression/goto-instrument-wmm-core/ppc_safe022_POWER_OPT/safe022.c new file mode 100644 index 00000000000..a5ce76336e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_POWER_OPT/safe022.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe022_POWER_OPT/test.desc new file mode 100644 index 00000000000..1372bed9370 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe022.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_PSO_ALL/safe022.c b/regression/goto-instrument-wmm-core/ppc_safe022_PSO_ALL/safe022.c new file mode 100644 index 00000000000..a5ce76336e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_PSO_ALL/safe022.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe022_PSO_ALL/test.desc new file mode 100644 index 00000000000..fae303bcf05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_PSO_OPC/safe022.c b/regression/goto-instrument-wmm-core/ppc_safe022_PSO_OPC/safe022.c new file mode 100644 index 00000000000..a5ce76336e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_PSO_OPC/safe022.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe022_PSO_OPC/test.desc new file mode 100644 index 00000000000..5368562c8ce --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_PSO_OPT/safe022.c b/regression/goto-instrument-wmm-core/ppc_safe022_PSO_OPT/safe022.c new file mode 100644 index 00000000000..a5ce76336e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_PSO_OPT/safe022.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe022_PSO_OPT/test.desc new file mode 100644 index 00000000000..d357da83515 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe022.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_RMO_ALL/safe022.c b/regression/goto-instrument-wmm-core/ppc_safe022_RMO_ALL/safe022.c new file mode 100644 index 00000000000..a5ce76336e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_RMO_ALL/safe022.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe022_RMO_ALL/test.desc new file mode 100644 index 00000000000..1935de00e24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_RMO_OPC/safe022.c b/regression/goto-instrument-wmm-core/ppc_safe022_RMO_OPC/safe022.c new file mode 100644 index 00000000000..a5ce76336e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_RMO_OPC/safe022.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe022_RMO_OPC/test.desc new file mode 100644 index 00000000000..0e4c4451250 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_RMO_OPT/safe022.c b/regression/goto-instrument-wmm-core/ppc_safe022_RMO_OPT/safe022.c new file mode 100644 index 00000000000..a5ce76336e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_RMO_OPT/safe022.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe022_RMO_OPT/test.desc new file mode 100644 index 00000000000..a7bdaa76f98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe022.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_SC_SAFE/safe022.c b/regression/goto-instrument-wmm-core/ppc_safe022_SC_SAFE/safe022.c new file mode 100644 index 00000000000..a5ce76336e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_SC_SAFE/safe022.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe022_SC_SAFE/test.desc new file mode 100644 index 00000000000..23779e73c13 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_TSO_ALL/safe022.c b/regression/goto-instrument-wmm-core/ppc_safe022_TSO_ALL/safe022.c new file mode 100644 index 00000000000..a5ce76336e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_TSO_ALL/safe022.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe022_TSO_ALL/test.desc new file mode 100644 index 00000000000..5cb4e45cc1f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_TSO_OPC/safe022.c b/regression/goto-instrument-wmm-core/ppc_safe022_TSO_OPC/safe022.c new file mode 100644 index 00000000000..a5ce76336e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_TSO_OPC/safe022.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe022_TSO_OPC/test.desc new file mode 100644 index 00000000000..d09fc3644b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_TSO_OPT/safe022.c b/regression/goto-instrument-wmm-core/ppc_safe022_TSO_OPT/safe022.c new file mode 100644 index 00000000000..a5ce76336e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_TSO_OPT/safe022.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe022_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe022_TSO_OPT/test.desc new file mode 100644 index 00000000000..0d657dae25f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe022_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe022.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_CAV11_ERROR/safe023.c b/regression/goto-instrument-wmm-core/ppc_safe023_CAV11_ERROR/safe023.c new file mode 100644 index 00000000000..ec67d8df224 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_CAV11_ERROR/safe023.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe023_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..754e2d901ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe023.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_POWER_ALL/safe023.c b/regression/goto-instrument-wmm-core/ppc_safe023_POWER_ALL/safe023.c new file mode 100644 index 00000000000..ec67d8df224 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_POWER_ALL/safe023.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe023_POWER_ALL/test.desc new file mode 100644 index 00000000000..2f099049bcb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe023.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_POWER_OPC/safe023.c b/regression/goto-instrument-wmm-core/ppc_safe023_POWER_OPC/safe023.c new file mode 100644 index 00000000000..ec67d8df224 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_POWER_OPC/safe023.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe023_POWER_OPC/test.desc new file mode 100644 index 00000000000..303c9152655 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe023.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_POWER_OPT/safe023.c b/regression/goto-instrument-wmm-core/ppc_safe023_POWER_OPT/safe023.c new file mode 100644 index 00000000000..ec67d8df224 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_POWER_OPT/safe023.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe023_POWER_OPT/test.desc new file mode 100644 index 00000000000..a3719db8353 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe023.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_PSO_ALL/safe023.c b/regression/goto-instrument-wmm-core/ppc_safe023_PSO_ALL/safe023.c new file mode 100644 index 00000000000..ec67d8df224 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_PSO_ALL/safe023.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe023_PSO_ALL/test.desc new file mode 100644 index 00000000000..8c89fe7bb61 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe023.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_PSO_OPC/safe023.c b/regression/goto-instrument-wmm-core/ppc_safe023_PSO_OPC/safe023.c new file mode 100644 index 00000000000..ec67d8df224 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_PSO_OPC/safe023.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe023_PSO_OPC/test.desc new file mode 100644 index 00000000000..8ed9065f2d1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe023.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_PSO_OPT/safe023.c b/regression/goto-instrument-wmm-core/ppc_safe023_PSO_OPT/safe023.c new file mode 100644 index 00000000000..ec67d8df224 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_PSO_OPT/safe023.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe023_PSO_OPT/test.desc new file mode 100644 index 00000000000..4dc2ca7cc35 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe023.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_RMO_ALL/safe023.c b/regression/goto-instrument-wmm-core/ppc_safe023_RMO_ALL/safe023.c new file mode 100644 index 00000000000..ec67d8df224 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_RMO_ALL/safe023.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe023_RMO_ALL/test.desc new file mode 100644 index 00000000000..1329c6b516a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe023.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_RMO_OPC/safe023.c b/regression/goto-instrument-wmm-core/ppc_safe023_RMO_OPC/safe023.c new file mode 100644 index 00000000000..ec67d8df224 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_RMO_OPC/safe023.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe023_RMO_OPC/test.desc new file mode 100644 index 00000000000..425a2fbd34f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe023.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_RMO_OPT/safe023.c b/regression/goto-instrument-wmm-core/ppc_safe023_RMO_OPT/safe023.c new file mode 100644 index 00000000000..ec67d8df224 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_RMO_OPT/safe023.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe023_RMO_OPT/test.desc new file mode 100644 index 00000000000..92aa8082620 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe023.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_SC_SAFE/safe023.c b/regression/goto-instrument-wmm-core/ppc_safe023_SC_SAFE/safe023.c new file mode 100644 index 00000000000..ec67d8df224 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_SC_SAFE/safe023.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe023_SC_SAFE/test.desc new file mode 100644 index 00000000000..34d37a6a07d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe023.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_TSO_ALL/safe023.c b/regression/goto-instrument-wmm-core/ppc_safe023_TSO_ALL/safe023.c new file mode 100644 index 00000000000..ec67d8df224 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_TSO_ALL/safe023.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe023_TSO_ALL/test.desc new file mode 100644 index 00000000000..9b23a1cdd56 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe023.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_TSO_OPC/safe023.c b/regression/goto-instrument-wmm-core/ppc_safe023_TSO_OPC/safe023.c new file mode 100644 index 00000000000..ec67d8df224 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_TSO_OPC/safe023.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe023_TSO_OPC/test.desc new file mode 100644 index 00000000000..b41ee2b3f39 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe023.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_TSO_OPT/safe023.c b/regression/goto-instrument-wmm-core/ppc_safe023_TSO_OPT/safe023.c new file mode 100644 index 00000000000..ec67d8df224 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_TSO_OPT/safe023.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe023_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe023_TSO_OPT/test.desc new file mode 100644 index 00000000000..124f24585ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe023_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe023.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_CAV11_ERROR/safe024.c b/regression/goto-instrument-wmm-core/ppc_safe024_CAV11_ERROR/safe024.c new file mode 100644 index 00000000000..4d0dc7f5454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_CAV11_ERROR/safe024.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe024_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..41e4452b737 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_POWER_ALL/safe024.c b/regression/goto-instrument-wmm-core/ppc_safe024_POWER_ALL/safe024.c new file mode 100644 index 00000000000..4d0dc7f5454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_POWER_ALL/safe024.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe024_POWER_ALL/test.desc new file mode 100644 index 00000000000..b54f91bf6c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_POWER_OPC/safe024.c b/regression/goto-instrument-wmm-core/ppc_safe024_POWER_OPC/safe024.c new file mode 100644 index 00000000000..4d0dc7f5454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_POWER_OPC/safe024.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe024_POWER_OPC/test.desc new file mode 100644 index 00000000000..ad140826d1c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_POWER_OPT/safe024.c b/regression/goto-instrument-wmm-core/ppc_safe024_POWER_OPT/safe024.c new file mode 100644 index 00000000000..4d0dc7f5454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_POWER_OPT/safe024.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe024_POWER_OPT/test.desc new file mode 100644 index 00000000000..4911404cda9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe024.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_PSO_ALL/safe024.c b/regression/goto-instrument-wmm-core/ppc_safe024_PSO_ALL/safe024.c new file mode 100644 index 00000000000..4d0dc7f5454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_PSO_ALL/safe024.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe024_PSO_ALL/test.desc new file mode 100644 index 00000000000..e4e05a5c337 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_PSO_OPC/safe024.c b/regression/goto-instrument-wmm-core/ppc_safe024_PSO_OPC/safe024.c new file mode 100644 index 00000000000..4d0dc7f5454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_PSO_OPC/safe024.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe024_PSO_OPC/test.desc new file mode 100644 index 00000000000..57606cdbcf7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_PSO_OPT/safe024.c b/regression/goto-instrument-wmm-core/ppc_safe024_PSO_OPT/safe024.c new file mode 100644 index 00000000000..4d0dc7f5454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_PSO_OPT/safe024.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe024_PSO_OPT/test.desc new file mode 100644 index 00000000000..4b7d038ffca --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe024.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_RMO_ALL/safe024.c b/regression/goto-instrument-wmm-core/ppc_safe024_RMO_ALL/safe024.c new file mode 100644 index 00000000000..4d0dc7f5454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_RMO_ALL/safe024.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe024_RMO_ALL/test.desc new file mode 100644 index 00000000000..b2d779cdfc8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_RMO_OPC/safe024.c b/regression/goto-instrument-wmm-core/ppc_safe024_RMO_OPC/safe024.c new file mode 100644 index 00000000000..4d0dc7f5454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_RMO_OPC/safe024.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe024_RMO_OPC/test.desc new file mode 100644 index 00000000000..bd6b0e75e42 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_RMO_OPT/safe024.c b/regression/goto-instrument-wmm-core/ppc_safe024_RMO_OPT/safe024.c new file mode 100644 index 00000000000..4d0dc7f5454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_RMO_OPT/safe024.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe024_RMO_OPT/test.desc new file mode 100644 index 00000000000..2f79a7cce0a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe024.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_SC_SAFE/safe024.c b/regression/goto-instrument-wmm-core/ppc_safe024_SC_SAFE/safe024.c new file mode 100644 index 00000000000..4d0dc7f5454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_SC_SAFE/safe024.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe024_SC_SAFE/test.desc new file mode 100644 index 00000000000..9415d685415 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_TSO_ALL/safe024.c b/regression/goto-instrument-wmm-core/ppc_safe024_TSO_ALL/safe024.c new file mode 100644 index 00000000000..4d0dc7f5454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_TSO_ALL/safe024.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe024_TSO_ALL/test.desc new file mode 100644 index 00000000000..ab25afb193a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_TSO_OPC/safe024.c b/regression/goto-instrument-wmm-core/ppc_safe024_TSO_OPC/safe024.c new file mode 100644 index 00000000000..4d0dc7f5454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_TSO_OPC/safe024.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe024_TSO_OPC/test.desc new file mode 100644 index 00000000000..b0ea90e6aed --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_TSO_OPT/safe024.c b/regression/goto-instrument-wmm-core/ppc_safe024_TSO_OPT/safe024.c new file mode 100644 index 00000000000..4d0dc7f5454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_TSO_OPT/safe024.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe024_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe024_TSO_OPT/test.desc new file mode 100644 index 00000000000..54120806b93 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe024_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe024.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_CAV11_SAFE/safe025.c b/regression/goto-instrument-wmm-core/ppc_safe025_CAV11_SAFE/safe025.c new file mode 100644 index 00000000000..00be89c1a1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_CAV11_SAFE/safe025.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe025_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..ec21642c14c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_POWER_ALL/safe025.c b/regression/goto-instrument-wmm-core/ppc_safe025_POWER_ALL/safe025.c new file mode 100644 index 00000000000..00be89c1a1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_POWER_ALL/safe025.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe025_POWER_ALL/test.desc new file mode 100644 index 00000000000..7725bb752d8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_POWER_OPC/safe025.c b/regression/goto-instrument-wmm-core/ppc_safe025_POWER_OPC/safe025.c new file mode 100644 index 00000000000..00be89c1a1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_POWER_OPC/safe025.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe025_POWER_OPC/test.desc new file mode 100644 index 00000000000..6ca714c8d94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe025_POWER_OPT/test.desc index 794137db90b..ab3ee9acfa5 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe025_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe025_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe025.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_PSO_ALL/safe025.c b/regression/goto-instrument-wmm-core/ppc_safe025_PSO_ALL/safe025.c new file mode 100644 index 00000000000..00be89c1a1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_PSO_ALL/safe025.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe025_PSO_ALL/test.desc new file mode 100644 index 00000000000..6005c633809 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_PSO_OPC/safe025.c b/regression/goto-instrument-wmm-core/ppc_safe025_PSO_OPC/safe025.c new file mode 100644 index 00000000000..00be89c1a1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_PSO_OPC/safe025.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe025_PSO_OPC/test.desc new file mode 100644 index 00000000000..6f411d37bb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_PSO_OPT/safe025.c b/regression/goto-instrument-wmm-core/ppc_safe025_PSO_OPT/safe025.c new file mode 100644 index 00000000000..00be89c1a1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_PSO_OPT/safe025.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe025_PSO_OPT/test.desc new file mode 100644 index 00000000000..d59bef036f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe025.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_RMO_ALL/safe025.c b/regression/goto-instrument-wmm-core/ppc_safe025_RMO_ALL/safe025.c new file mode 100644 index 00000000000..00be89c1a1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_RMO_ALL/safe025.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe025_RMO_ALL/test.desc new file mode 100644 index 00000000000..e1986b7e72b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_RMO_OPC/safe025.c b/regression/goto-instrument-wmm-core/ppc_safe025_RMO_OPC/safe025.c new file mode 100644 index 00000000000..00be89c1a1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_RMO_OPC/safe025.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe025_RMO_OPC/test.desc new file mode 100644 index 00000000000..3ee12ec4355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_RMO_OPT/safe025.c b/regression/goto-instrument-wmm-core/ppc_safe025_RMO_OPT/safe025.c new file mode 100644 index 00000000000..00be89c1a1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_RMO_OPT/safe025.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe025_RMO_OPT/test.desc new file mode 100644 index 00000000000..9d1f238b31a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe025.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_SC_SAFE/safe025.c b/regression/goto-instrument-wmm-core/ppc_safe025_SC_SAFE/safe025.c new file mode 100644 index 00000000000..00be89c1a1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_SC_SAFE/safe025.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe025_SC_SAFE/test.desc new file mode 100644 index 00000000000..d78a40df04c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_TSO_ALL/safe025.c b/regression/goto-instrument-wmm-core/ppc_safe025_TSO_ALL/safe025.c new file mode 100644 index 00000000000..00be89c1a1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_TSO_ALL/safe025.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe025_TSO_ALL/test.desc new file mode 100644 index 00000000000..5958c2d1445 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_TSO_OPC/safe025.c b/regression/goto-instrument-wmm-core/ppc_safe025_TSO_OPC/safe025.c new file mode 100644 index 00000000000..00be89c1a1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_TSO_OPC/safe025.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe025_TSO_OPC/test.desc new file mode 100644 index 00000000000..fcbe1b8dfef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_TSO_OPT/safe025.c b/regression/goto-instrument-wmm-core/ppc_safe025_TSO_OPT/safe025.c new file mode 100644 index 00000000000..00be89c1a1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_TSO_OPT/safe025.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe025_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe025_TSO_OPT/test.desc new file mode 100644 index 00000000000..b0debbd1050 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe025_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe025.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_CAV11_ERROR/safe026.c b/regression/goto-instrument-wmm-core/ppc_safe026_CAV11_ERROR/safe026.c new file mode 100644 index 00000000000..c2094615e20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_CAV11_ERROR/safe026.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe026_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..5155d4d5da2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_POWER_ALL/safe026.c b/regression/goto-instrument-wmm-core/ppc_safe026_POWER_ALL/safe026.c new file mode 100644 index 00000000000..c2094615e20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_POWER_ALL/safe026.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe026_POWER_ALL/test.desc new file mode 100644 index 00000000000..509dbf7d2ca --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_POWER_OPC/safe026.c b/regression/goto-instrument-wmm-core/ppc_safe026_POWER_OPC/safe026.c new file mode 100644 index 00000000000..c2094615e20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_POWER_OPC/safe026.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe026_POWER_OPC/test.desc new file mode 100644 index 00000000000..fa7169eda25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_POWER_OPT/safe026.c b/regression/goto-instrument-wmm-core/ppc_safe026_POWER_OPT/safe026.c new file mode 100644 index 00000000000..c2094615e20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_POWER_OPT/safe026.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe026_POWER_OPT/test.desc new file mode 100644 index 00000000000..1d32fe133c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe026.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_PSO_ALL/safe026.c b/regression/goto-instrument-wmm-core/ppc_safe026_PSO_ALL/safe026.c new file mode 100644 index 00000000000..c2094615e20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_PSO_ALL/safe026.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe026_PSO_ALL/test.desc new file mode 100644 index 00000000000..71be668fc62 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_PSO_OPC/safe026.c b/regression/goto-instrument-wmm-core/ppc_safe026_PSO_OPC/safe026.c new file mode 100644 index 00000000000..c2094615e20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_PSO_OPC/safe026.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe026_PSO_OPC/test.desc new file mode 100644 index 00000000000..7cc7e63da4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_PSO_OPT/safe026.c b/regression/goto-instrument-wmm-core/ppc_safe026_PSO_OPT/safe026.c new file mode 100644 index 00000000000..c2094615e20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_PSO_OPT/safe026.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe026_PSO_OPT/test.desc new file mode 100644 index 00000000000..5e41bcc8cad --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe026.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_RMO_ALL/safe026.c b/regression/goto-instrument-wmm-core/ppc_safe026_RMO_ALL/safe026.c new file mode 100644 index 00000000000..c2094615e20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_RMO_ALL/safe026.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe026_RMO_ALL/test.desc new file mode 100644 index 00000000000..9a6ae783a19 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_RMO_OPC/safe026.c b/regression/goto-instrument-wmm-core/ppc_safe026_RMO_OPC/safe026.c new file mode 100644 index 00000000000..c2094615e20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_RMO_OPC/safe026.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe026_RMO_OPC/test.desc new file mode 100644 index 00000000000..414a84e4ecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_RMO_OPT/safe026.c b/regression/goto-instrument-wmm-core/ppc_safe026_RMO_OPT/safe026.c new file mode 100644 index 00000000000..c2094615e20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_RMO_OPT/safe026.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe026_RMO_OPT/test.desc new file mode 100644 index 00000000000..3dc86a8f992 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe026.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_SC_SAFE/safe026.c b/regression/goto-instrument-wmm-core/ppc_safe026_SC_SAFE/safe026.c new file mode 100644 index 00000000000..c2094615e20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_SC_SAFE/safe026.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe026_SC_SAFE/test.desc new file mode 100644 index 00000000000..75398d0d61b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_TSO_ALL/safe026.c b/regression/goto-instrument-wmm-core/ppc_safe026_TSO_ALL/safe026.c new file mode 100644 index 00000000000..c2094615e20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_TSO_ALL/safe026.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe026_TSO_ALL/test.desc new file mode 100644 index 00000000000..f37c2e5cfd2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_TSO_OPC/safe026.c b/regression/goto-instrument-wmm-core/ppc_safe026_TSO_OPC/safe026.c new file mode 100644 index 00000000000..c2094615e20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_TSO_OPC/safe026.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe026_TSO_OPC/test.desc new file mode 100644 index 00000000000..75a0db6e065 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_TSO_OPT/safe026.c b/regression/goto-instrument-wmm-core/ppc_safe026_TSO_OPT/safe026.c new file mode 100644 index 00000000000..c2094615e20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_TSO_OPT/safe026.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe026_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe026_TSO_OPT/test.desc new file mode 100644 index 00000000000..1c7da6913b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe026_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe026.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_CAV11_ERROR/safe027.c b/regression/goto-instrument-wmm-core/ppc_safe027_CAV11_ERROR/safe027.c new file mode 100644 index 00000000000..4aac3f10e79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_CAV11_ERROR/safe027.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe027_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..4b5c4e9ae72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe027.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_POWER_ALL/safe027.c b/regression/goto-instrument-wmm-core/ppc_safe027_POWER_ALL/safe027.c new file mode 100644 index 00000000000..4aac3f10e79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_POWER_ALL/safe027.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe027_POWER_ALL/test.desc new file mode 100644 index 00000000000..5c2c271650f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe027.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_POWER_OPC/safe027.c b/regression/goto-instrument-wmm-core/ppc_safe027_POWER_OPC/safe027.c new file mode 100644 index 00000000000..4aac3f10e79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_POWER_OPC/safe027.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe027_POWER_OPC/test.desc new file mode 100644 index 00000000000..b8839941d84 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe027.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe027_POWER_OPT/test.desc index 2f549614819..097b2f4bf76 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe027_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe027_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe027.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_PSO_ALL/safe027.c b/regression/goto-instrument-wmm-core/ppc_safe027_PSO_ALL/safe027.c new file mode 100644 index 00000000000..4aac3f10e79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_PSO_ALL/safe027.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe027_PSO_ALL/test.desc new file mode 100644 index 00000000000..9d0307cc9d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe027.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_PSO_OPC/safe027.c b/regression/goto-instrument-wmm-core/ppc_safe027_PSO_OPC/safe027.c new file mode 100644 index 00000000000..4aac3f10e79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_PSO_OPC/safe027.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe027_PSO_OPC/test.desc new file mode 100644 index 00000000000..2bf4642284b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe027.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_PSO_OPT/safe027.c b/regression/goto-instrument-wmm-core/ppc_safe027_PSO_OPT/safe027.c new file mode 100644 index 00000000000..4aac3f10e79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_PSO_OPT/safe027.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe027_PSO_OPT/test.desc new file mode 100644 index 00000000000..a9284f089cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe027.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_RMO_ALL/safe027.c b/regression/goto-instrument-wmm-core/ppc_safe027_RMO_ALL/safe027.c new file mode 100644 index 00000000000..4aac3f10e79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_RMO_ALL/safe027.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe027_RMO_ALL/test.desc new file mode 100644 index 00000000000..477f5fb6940 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe027.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_RMO_OPC/safe027.c b/regression/goto-instrument-wmm-core/ppc_safe027_RMO_OPC/safe027.c new file mode 100644 index 00000000000..4aac3f10e79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_RMO_OPC/safe027.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe027_RMO_OPC/test.desc new file mode 100644 index 00000000000..8c735d9b10c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe027.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_RMO_OPT/safe027.c b/regression/goto-instrument-wmm-core/ppc_safe027_RMO_OPT/safe027.c new file mode 100644 index 00000000000..4aac3f10e79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_RMO_OPT/safe027.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe027_RMO_OPT/test.desc new file mode 100644 index 00000000000..7f31326ab90 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe027.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_SC_SAFE/safe027.c b/regression/goto-instrument-wmm-core/ppc_safe027_SC_SAFE/safe027.c new file mode 100644 index 00000000000..4aac3f10e79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_SC_SAFE/safe027.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe027_SC_SAFE/test.desc new file mode 100644 index 00000000000..a43d6d532e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe027.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_TSO_ALL/safe027.c b/regression/goto-instrument-wmm-core/ppc_safe027_TSO_ALL/safe027.c new file mode 100644 index 00000000000..4aac3f10e79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_TSO_ALL/safe027.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe027_TSO_ALL/test.desc new file mode 100644 index 00000000000..b4b54b2703c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe027.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_TSO_OPC/safe027.c b/regression/goto-instrument-wmm-core/ppc_safe027_TSO_OPC/safe027.c new file mode 100644 index 00000000000..4aac3f10e79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_TSO_OPC/safe027.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe027_TSO_OPC/test.desc new file mode 100644 index 00000000000..817086efe39 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe027.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_TSO_OPT/safe027.c b/regression/goto-instrument-wmm-core/ppc_safe027_TSO_OPT/safe027.c new file mode 100644 index 00000000000..4aac3f10e79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_TSO_OPT/safe027.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe027_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe027_TSO_OPT/test.desc new file mode 100644 index 00000000000..1187b029390 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe027_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe027.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_CAV11_SAFE/safe028.c b/regression/goto-instrument-wmm-core/ppc_safe028_CAV11_SAFE/safe028.c new file mode 100644 index 00000000000..3b9ce5bb355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_CAV11_SAFE/safe028.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe028_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..afdc8d0b1f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe028.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_POWER_ALL/safe028.c b/regression/goto-instrument-wmm-core/ppc_safe028_POWER_ALL/safe028.c new file mode 100644 index 00000000000..3b9ce5bb355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_POWER_ALL/safe028.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe028_POWER_ALL/test.desc new file mode 100644 index 00000000000..7560eb60c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe028.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_POWER_OPC/safe028.c b/regression/goto-instrument-wmm-core/ppc_safe028_POWER_OPC/safe028.c new file mode 100644 index 00000000000..3b9ce5bb355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_POWER_OPC/safe028.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe028_POWER_OPC/test.desc new file mode 100644 index 00000000000..945d5322831 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe028.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_POWER_OPT/safe028.c b/regression/goto-instrument-wmm-core/ppc_safe028_POWER_OPT/safe028.c new file mode 100644 index 00000000000..3b9ce5bb355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_POWER_OPT/safe028.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe028_POWER_OPT/test.desc new file mode 100644 index 00000000000..1d36072c7e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe028.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_PSO_ALL/safe028.c b/regression/goto-instrument-wmm-core/ppc_safe028_PSO_ALL/safe028.c new file mode 100644 index 00000000000..3b9ce5bb355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_PSO_ALL/safe028.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe028_PSO_ALL/test.desc new file mode 100644 index 00000000000..f1a9ae36b2f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe028.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_PSO_OPC/safe028.c b/regression/goto-instrument-wmm-core/ppc_safe028_PSO_OPC/safe028.c new file mode 100644 index 00000000000..3b9ce5bb355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_PSO_OPC/safe028.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe028_PSO_OPC/test.desc new file mode 100644 index 00000000000..8d220e09ab4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe028.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_PSO_OPT/safe028.c b/regression/goto-instrument-wmm-core/ppc_safe028_PSO_OPT/safe028.c new file mode 100644 index 00000000000..3b9ce5bb355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_PSO_OPT/safe028.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe028_PSO_OPT/test.desc new file mode 100644 index 00000000000..17585802c3e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe028.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_RMO_ALL/safe028.c b/regression/goto-instrument-wmm-core/ppc_safe028_RMO_ALL/safe028.c new file mode 100644 index 00000000000..3b9ce5bb355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_RMO_ALL/safe028.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe028_RMO_ALL/test.desc new file mode 100644 index 00000000000..3f18ad2851e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe028.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_RMO_OPC/safe028.c b/regression/goto-instrument-wmm-core/ppc_safe028_RMO_OPC/safe028.c new file mode 100644 index 00000000000..3b9ce5bb355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_RMO_OPC/safe028.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe028_RMO_OPC/test.desc new file mode 100644 index 00000000000..22dd66a4b48 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe028.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_RMO_OPT/safe028.c b/regression/goto-instrument-wmm-core/ppc_safe028_RMO_OPT/safe028.c new file mode 100644 index 00000000000..3b9ce5bb355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_RMO_OPT/safe028.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe028_RMO_OPT/test.desc new file mode 100644 index 00000000000..be1740821f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe028.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_SC_SAFE/safe028.c b/regression/goto-instrument-wmm-core/ppc_safe028_SC_SAFE/safe028.c new file mode 100644 index 00000000000..3b9ce5bb355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_SC_SAFE/safe028.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe028_SC_SAFE/test.desc new file mode 100644 index 00000000000..ad5869cdb1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe028.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_TSO_ALL/safe028.c b/regression/goto-instrument-wmm-core/ppc_safe028_TSO_ALL/safe028.c new file mode 100644 index 00000000000..3b9ce5bb355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_TSO_ALL/safe028.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe028_TSO_ALL/test.desc new file mode 100644 index 00000000000..9cf87a3bcfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe028.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_TSO_OPC/safe028.c b/regression/goto-instrument-wmm-core/ppc_safe028_TSO_OPC/safe028.c new file mode 100644 index 00000000000..3b9ce5bb355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_TSO_OPC/safe028.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe028_TSO_OPC/test.desc new file mode 100644 index 00000000000..4f2787ce1d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe028.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_TSO_OPT/safe028.c b/regression/goto-instrument-wmm-core/ppc_safe028_TSO_OPT/safe028.c new file mode 100644 index 00000000000..3b9ce5bb355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_TSO_OPT/safe028.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe028_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe028_TSO_OPT/test.desc new file mode 100644 index 00000000000..c42c0ed8f56 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe028_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe028.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_CAV11_ERROR/safe029.c b/regression/goto-instrument-wmm-core/ppc_safe029_CAV11_ERROR/safe029.c new file mode 100644 index 00000000000..3f9c0478ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_CAV11_ERROR/safe029.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe029_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..a57d7d737bf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_POWER_ALL/safe029.c b/regression/goto-instrument-wmm-core/ppc_safe029_POWER_ALL/safe029.c new file mode 100644 index 00000000000..3f9c0478ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_POWER_ALL/safe029.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe029_POWER_ALL/test.desc new file mode 100644 index 00000000000..69cbf6cb112 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_POWER_OPC/safe029.c b/regression/goto-instrument-wmm-core/ppc_safe029_POWER_OPC/safe029.c new file mode 100644 index 00000000000..3f9c0478ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_POWER_OPC/safe029.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe029_POWER_OPC/test.desc new file mode 100644 index 00000000000..e49ebdfb649 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_POWER_OPT/safe029.c b/regression/goto-instrument-wmm-core/ppc_safe029_POWER_OPT/safe029.c new file mode 100644 index 00000000000..3f9c0478ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_POWER_OPT/safe029.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe029_POWER_OPT/test.desc new file mode 100644 index 00000000000..8b88cacc76e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe029.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_PSO_ALL/safe029.c b/regression/goto-instrument-wmm-core/ppc_safe029_PSO_ALL/safe029.c new file mode 100644 index 00000000000..3f9c0478ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_PSO_ALL/safe029.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe029_PSO_ALL/test.desc new file mode 100644 index 00000000000..4710a4fa3b5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_PSO_OPC/safe029.c b/regression/goto-instrument-wmm-core/ppc_safe029_PSO_OPC/safe029.c new file mode 100644 index 00000000000..3f9c0478ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_PSO_OPC/safe029.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe029_PSO_OPC/test.desc new file mode 100644 index 00000000000..0f6f96da230 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_PSO_OPT/safe029.c b/regression/goto-instrument-wmm-core/ppc_safe029_PSO_OPT/safe029.c new file mode 100644 index 00000000000..3f9c0478ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_PSO_OPT/safe029.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe029_PSO_OPT/test.desc new file mode 100644 index 00000000000..10f4cad462d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe029.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_RMO_ALL/safe029.c b/regression/goto-instrument-wmm-core/ppc_safe029_RMO_ALL/safe029.c new file mode 100644 index 00000000000..3f9c0478ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_RMO_ALL/safe029.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe029_RMO_ALL/test.desc new file mode 100644 index 00000000000..ccd91a1916e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_RMO_OPC/safe029.c b/regression/goto-instrument-wmm-core/ppc_safe029_RMO_OPC/safe029.c new file mode 100644 index 00000000000..3f9c0478ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_RMO_OPC/safe029.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe029_RMO_OPC/test.desc new file mode 100644 index 00000000000..00e21fc89fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_RMO_OPT/safe029.c b/regression/goto-instrument-wmm-core/ppc_safe029_RMO_OPT/safe029.c new file mode 100644 index 00000000000..3f9c0478ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_RMO_OPT/safe029.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe029_RMO_OPT/test.desc new file mode 100644 index 00000000000..234d592017d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe029.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_SC_SAFE/safe029.c b/regression/goto-instrument-wmm-core/ppc_safe029_SC_SAFE/safe029.c new file mode 100644 index 00000000000..3f9c0478ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_SC_SAFE/safe029.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe029_SC_SAFE/test.desc new file mode 100644 index 00000000000..65396879acb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_TSO_ALL/safe029.c b/regression/goto-instrument-wmm-core/ppc_safe029_TSO_ALL/safe029.c new file mode 100644 index 00000000000..3f9c0478ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_TSO_ALL/safe029.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe029_TSO_ALL/test.desc new file mode 100644 index 00000000000..99b2d45c8c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_TSO_OPC/safe029.c b/regression/goto-instrument-wmm-core/ppc_safe029_TSO_OPC/safe029.c new file mode 100644 index 00000000000..3f9c0478ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_TSO_OPC/safe029.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe029_TSO_OPC/test.desc new file mode 100644 index 00000000000..7051d2a6897 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_TSO_OPT/safe029.c b/regression/goto-instrument-wmm-core/ppc_safe029_TSO_OPT/safe029.c new file mode 100644 index 00000000000..3f9c0478ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_TSO_OPT/safe029.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe029_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe029_TSO_OPT/test.desc new file mode 100644 index 00000000000..eb5e8c8f80f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe029_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe029.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_CAV11_ERROR/safe030.c b/regression/goto-instrument-wmm-core/ppc_safe030_CAV11_ERROR/safe030.c new file mode 100644 index 00000000000..12df4611ca2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_CAV11_ERROR/safe030.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe030_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..567039e0771 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_POWER_ALL/safe030.c b/regression/goto-instrument-wmm-core/ppc_safe030_POWER_ALL/safe030.c new file mode 100644 index 00000000000..12df4611ca2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_POWER_ALL/safe030.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe030_POWER_ALL/test.desc new file mode 100644 index 00000000000..3cd75df71ee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_POWER_OPC/safe030.c b/regression/goto-instrument-wmm-core/ppc_safe030_POWER_OPC/safe030.c new file mode 100644 index 00000000000..12df4611ca2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_POWER_OPC/safe030.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe030_POWER_OPC/test.desc new file mode 100644 index 00000000000..a76a8517886 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_POWER_OPT/safe030.c b/regression/goto-instrument-wmm-core/ppc_safe030_POWER_OPT/safe030.c new file mode 100644 index 00000000000..12df4611ca2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_POWER_OPT/safe030.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe030_POWER_OPT/test.desc new file mode 100644 index 00000000000..f904c61bcba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe030.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_PSO_ALL/safe030.c b/regression/goto-instrument-wmm-core/ppc_safe030_PSO_ALL/safe030.c new file mode 100644 index 00000000000..12df4611ca2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_PSO_ALL/safe030.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe030_PSO_ALL/test.desc new file mode 100644 index 00000000000..93db79407d7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_PSO_OPC/safe030.c b/regression/goto-instrument-wmm-core/ppc_safe030_PSO_OPC/safe030.c new file mode 100644 index 00000000000..12df4611ca2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_PSO_OPC/safe030.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe030_PSO_OPC/test.desc new file mode 100644 index 00000000000..46c497190cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_PSO_OPT/safe030.c b/regression/goto-instrument-wmm-core/ppc_safe030_PSO_OPT/safe030.c new file mode 100644 index 00000000000..12df4611ca2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_PSO_OPT/safe030.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe030_PSO_OPT/test.desc new file mode 100644 index 00000000000..c77c760b407 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe030.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_RMO_ALL/safe030.c b/regression/goto-instrument-wmm-core/ppc_safe030_RMO_ALL/safe030.c new file mode 100644 index 00000000000..12df4611ca2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_RMO_ALL/safe030.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe030_RMO_ALL/test.desc new file mode 100644 index 00000000000..770adef0e45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_RMO_OPC/safe030.c b/regression/goto-instrument-wmm-core/ppc_safe030_RMO_OPC/safe030.c new file mode 100644 index 00000000000..12df4611ca2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_RMO_OPC/safe030.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe030_RMO_OPC/test.desc new file mode 100644 index 00000000000..5bf04a7c23e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_RMO_OPT/safe030.c b/regression/goto-instrument-wmm-core/ppc_safe030_RMO_OPT/safe030.c new file mode 100644 index 00000000000..12df4611ca2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_RMO_OPT/safe030.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe030_RMO_OPT/test.desc new file mode 100644 index 00000000000..b5fab5e61c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe030.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_SC_SAFE/safe030.c b/regression/goto-instrument-wmm-core/ppc_safe030_SC_SAFE/safe030.c new file mode 100644 index 00000000000..12df4611ca2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_SC_SAFE/safe030.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe030_SC_SAFE/test.desc new file mode 100644 index 00000000000..514b50646a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_TSO_ALL/safe030.c b/regression/goto-instrument-wmm-core/ppc_safe030_TSO_ALL/safe030.c new file mode 100644 index 00000000000..12df4611ca2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_TSO_ALL/safe030.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe030_TSO_ALL/test.desc new file mode 100644 index 00000000000..ed5c39a4a50 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_TSO_OPC/safe030.c b/regression/goto-instrument-wmm-core/ppc_safe030_TSO_OPC/safe030.c new file mode 100644 index 00000000000..12df4611ca2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_TSO_OPC/safe030.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe030_TSO_OPC/test.desc new file mode 100644 index 00000000000..408bd0eab32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_TSO_OPT/safe030.c b/regression/goto-instrument-wmm-core/ppc_safe030_TSO_OPT/safe030.c new file mode 100644 index 00000000000..12df4611ca2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_TSO_OPT/safe030.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe030_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe030_TSO_OPT/test.desc new file mode 100644 index 00000000000..27c268eb230 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe030_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe030.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_CAV11_ERROR/safe031.c b/regression/goto-instrument-wmm-core/ppc_safe031_CAV11_ERROR/safe031.c new file mode 100644 index 00000000000..3c089fd2ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_CAV11_ERROR/safe031.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe031_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..78eb82e90f3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_POWER_ALL/safe031.c b/regression/goto-instrument-wmm-core/ppc_safe031_POWER_ALL/safe031.c new file mode 100644 index 00000000000..3c089fd2ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_POWER_ALL/safe031.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe031_POWER_ALL/test.desc new file mode 100644 index 00000000000..0629b668e37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_POWER_OPC/safe031.c b/regression/goto-instrument-wmm-core/ppc_safe031_POWER_OPC/safe031.c new file mode 100644 index 00000000000..3c089fd2ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_POWER_OPC/safe031.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe031_POWER_OPC/test.desc new file mode 100644 index 00000000000..35521108a43 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_POWER_OPT/safe031.c b/regression/goto-instrument-wmm-core/ppc_safe031_POWER_OPT/safe031.c new file mode 100644 index 00000000000..3c089fd2ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_POWER_OPT/safe031.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe031_POWER_OPT/test.desc new file mode 100644 index 00000000000..0a29593ee73 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe031.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_PSO_ALL/safe031.c b/regression/goto-instrument-wmm-core/ppc_safe031_PSO_ALL/safe031.c new file mode 100644 index 00000000000..3c089fd2ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_PSO_ALL/safe031.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe031_PSO_ALL/test.desc new file mode 100644 index 00000000000..7ec7fab5b88 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_PSO_OPC/safe031.c b/regression/goto-instrument-wmm-core/ppc_safe031_PSO_OPC/safe031.c new file mode 100644 index 00000000000..3c089fd2ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_PSO_OPC/safe031.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe031_PSO_OPC/test.desc new file mode 100644 index 00000000000..585d45cc5df --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_PSO_OPT/safe031.c b/regression/goto-instrument-wmm-core/ppc_safe031_PSO_OPT/safe031.c new file mode 100644 index 00000000000..3c089fd2ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_PSO_OPT/safe031.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe031_PSO_OPT/test.desc new file mode 100644 index 00000000000..3b81c08fe2f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe031.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_RMO_ALL/safe031.c b/regression/goto-instrument-wmm-core/ppc_safe031_RMO_ALL/safe031.c new file mode 100644 index 00000000000..3c089fd2ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_RMO_ALL/safe031.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe031_RMO_ALL/test.desc new file mode 100644 index 00000000000..a6391985a23 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_RMO_OPC/safe031.c b/regression/goto-instrument-wmm-core/ppc_safe031_RMO_OPC/safe031.c new file mode 100644 index 00000000000..3c089fd2ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_RMO_OPC/safe031.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe031_RMO_OPC/test.desc new file mode 100644 index 00000000000..45f4f1b915d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_RMO_OPT/safe031.c b/regression/goto-instrument-wmm-core/ppc_safe031_RMO_OPT/safe031.c new file mode 100644 index 00000000000..3c089fd2ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_RMO_OPT/safe031.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe031_RMO_OPT/test.desc new file mode 100644 index 00000000000..1b410458f38 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe031.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_SC_SAFE/safe031.c b/regression/goto-instrument-wmm-core/ppc_safe031_SC_SAFE/safe031.c new file mode 100644 index 00000000000..3c089fd2ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_SC_SAFE/safe031.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe031_SC_SAFE/test.desc new file mode 100644 index 00000000000..19decd2e7f2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_TSO_ALL/safe031.c b/regression/goto-instrument-wmm-core/ppc_safe031_TSO_ALL/safe031.c new file mode 100644 index 00000000000..3c089fd2ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_TSO_ALL/safe031.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe031_TSO_ALL/test.desc new file mode 100644 index 00000000000..87b89adf120 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_TSO_OPC/safe031.c b/regression/goto-instrument-wmm-core/ppc_safe031_TSO_OPC/safe031.c new file mode 100644 index 00000000000..3c089fd2ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_TSO_OPC/safe031.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe031_TSO_OPC/test.desc new file mode 100644 index 00000000000..93ecb193f50 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_TSO_OPT/safe031.c b/regression/goto-instrument-wmm-core/ppc_safe031_TSO_OPT/safe031.c new file mode 100644 index 00000000000..3c089fd2ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_TSO_OPT/safe031.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe031_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe031_TSO_OPT/test.desc new file mode 100644 index 00000000000..4440318cb3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe031_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe031.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_CAV11_ERROR/safe032.c b/regression/goto-instrument-wmm-core/ppc_safe032_CAV11_ERROR/safe032.c new file mode 100644 index 00000000000..7fcef1bdb75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_CAV11_ERROR/safe032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe032_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..9cb9a0faf19 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_POWER_ALL/safe032.c b/regression/goto-instrument-wmm-core/ppc_safe032_POWER_ALL/safe032.c new file mode 100644 index 00000000000..7fcef1bdb75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_POWER_ALL/safe032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe032_POWER_ALL/test.desc new file mode 100644 index 00000000000..e9f1e376132 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_POWER_OPC/safe032.c b/regression/goto-instrument-wmm-core/ppc_safe032_POWER_OPC/safe032.c new file mode 100644 index 00000000000..7fcef1bdb75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_POWER_OPC/safe032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe032_POWER_OPC/test.desc new file mode 100644 index 00000000000..fe6610718c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_POWER_OPT/safe032.c b/regression/goto-instrument-wmm-core/ppc_safe032_POWER_OPT/safe032.c new file mode 100644 index 00000000000..7fcef1bdb75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_POWER_OPT/safe032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe032_POWER_OPT/test.desc new file mode 100644 index 00000000000..bf25ab1f763 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe032.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_PSO_ALL/safe032.c b/regression/goto-instrument-wmm-core/ppc_safe032_PSO_ALL/safe032.c new file mode 100644 index 00000000000..7fcef1bdb75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_PSO_ALL/safe032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe032_PSO_ALL/test.desc new file mode 100644 index 00000000000..02294c084b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_PSO_OPC/safe032.c b/regression/goto-instrument-wmm-core/ppc_safe032_PSO_OPC/safe032.c new file mode 100644 index 00000000000..7fcef1bdb75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_PSO_OPC/safe032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe032_PSO_OPC/test.desc new file mode 100644 index 00000000000..9ef3bb412fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_PSO_OPT/safe032.c b/regression/goto-instrument-wmm-core/ppc_safe032_PSO_OPT/safe032.c new file mode 100644 index 00000000000..7fcef1bdb75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_PSO_OPT/safe032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe032_PSO_OPT/test.desc new file mode 100644 index 00000000000..53d3fbb8f27 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe032.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_RMO_ALL/safe032.c b/regression/goto-instrument-wmm-core/ppc_safe032_RMO_ALL/safe032.c new file mode 100644 index 00000000000..7fcef1bdb75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_RMO_ALL/safe032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe032_RMO_ALL/test.desc new file mode 100644 index 00000000000..48300464bf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_RMO_OPC/safe032.c b/regression/goto-instrument-wmm-core/ppc_safe032_RMO_OPC/safe032.c new file mode 100644 index 00000000000..7fcef1bdb75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_RMO_OPC/safe032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe032_RMO_OPC/test.desc new file mode 100644 index 00000000000..e9ef8c6c89d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_RMO_OPT/safe032.c b/regression/goto-instrument-wmm-core/ppc_safe032_RMO_OPT/safe032.c new file mode 100644 index 00000000000..7fcef1bdb75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_RMO_OPT/safe032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe032_RMO_OPT/test.desc new file mode 100644 index 00000000000..ba4bb7fa13d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe032.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_SC_SAFE/safe032.c b/regression/goto-instrument-wmm-core/ppc_safe032_SC_SAFE/safe032.c new file mode 100644 index 00000000000..7fcef1bdb75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_SC_SAFE/safe032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe032_SC_SAFE/test.desc new file mode 100644 index 00000000000..83963e8da4c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_TSO_ALL/safe032.c b/regression/goto-instrument-wmm-core/ppc_safe032_TSO_ALL/safe032.c new file mode 100644 index 00000000000..7fcef1bdb75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_TSO_ALL/safe032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe032_TSO_ALL/test.desc new file mode 100644 index 00000000000..94137b74814 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_TSO_OPC/safe032.c b/regression/goto-instrument-wmm-core/ppc_safe032_TSO_OPC/safe032.c new file mode 100644 index 00000000000..7fcef1bdb75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_TSO_OPC/safe032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe032_TSO_OPC/test.desc new file mode 100644 index 00000000000..b29559353eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_TSO_OPT/safe032.c b/regression/goto-instrument-wmm-core/ppc_safe032_TSO_OPT/safe032.c new file mode 100644 index 00000000000..7fcef1bdb75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_TSO_OPT/safe032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe032_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe032_TSO_OPT/test.desc new file mode 100644 index 00000000000..597de7ea345 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe032_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe032.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_CAV11_ERROR/safe033.c b/regression/goto-instrument-wmm-core/ppc_safe033_CAV11_ERROR/safe033.c new file mode 100644 index 00000000000..a22c06579d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_CAV11_ERROR/safe033.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe033_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..fb431ce278f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe033.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_POWER_ALL/safe033.c b/regression/goto-instrument-wmm-core/ppc_safe033_POWER_ALL/safe033.c new file mode 100644 index 00000000000..a22c06579d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_POWER_ALL/safe033.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe033_POWER_ALL/test.desc new file mode 100644 index 00000000000..8052ab8c2da --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe033.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_POWER_OPC/safe033.c b/regression/goto-instrument-wmm-core/ppc_safe033_POWER_OPC/safe033.c new file mode 100644 index 00000000000..a22c06579d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_POWER_OPC/safe033.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe033_POWER_OPC/test.desc new file mode 100644 index 00000000000..9bf458756d6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe033.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_POWER_OPT/safe033.c b/regression/goto-instrument-wmm-core/ppc_safe033_POWER_OPT/safe033.c new file mode 100644 index 00000000000..a22c06579d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_POWER_OPT/safe033.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe033_POWER_OPT/test.desc new file mode 100644 index 00000000000..3c256cbdac2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe033.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_PSO_ALL/safe033.c b/regression/goto-instrument-wmm-core/ppc_safe033_PSO_ALL/safe033.c new file mode 100644 index 00000000000..a22c06579d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_PSO_ALL/safe033.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe033_PSO_ALL/test.desc new file mode 100644 index 00000000000..cc6b86ace0a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe033.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_PSO_OPC/safe033.c b/regression/goto-instrument-wmm-core/ppc_safe033_PSO_OPC/safe033.c new file mode 100644 index 00000000000..a22c06579d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_PSO_OPC/safe033.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe033_PSO_OPC/test.desc new file mode 100644 index 00000000000..f58f62d8d9a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe033.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_PSO_OPT/safe033.c b/regression/goto-instrument-wmm-core/ppc_safe033_PSO_OPT/safe033.c new file mode 100644 index 00000000000..a22c06579d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_PSO_OPT/safe033.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe033_PSO_OPT/test.desc new file mode 100644 index 00000000000..99cabaa3e54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe033.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_RMO_ALL/safe033.c b/regression/goto-instrument-wmm-core/ppc_safe033_RMO_ALL/safe033.c new file mode 100644 index 00000000000..a22c06579d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_RMO_ALL/safe033.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe033_RMO_ALL/test.desc new file mode 100644 index 00000000000..5f5443f5624 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe033.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_RMO_OPC/safe033.c b/regression/goto-instrument-wmm-core/ppc_safe033_RMO_OPC/safe033.c new file mode 100644 index 00000000000..a22c06579d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_RMO_OPC/safe033.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe033_RMO_OPC/test.desc new file mode 100644 index 00000000000..4d50d1b708b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe033.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_RMO_OPT/safe033.c b/regression/goto-instrument-wmm-core/ppc_safe033_RMO_OPT/safe033.c new file mode 100644 index 00000000000..a22c06579d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_RMO_OPT/safe033.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe033_RMO_OPT/test.desc new file mode 100644 index 00000000000..063a8531584 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe033.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_SC_SAFE/safe033.c b/regression/goto-instrument-wmm-core/ppc_safe033_SC_SAFE/safe033.c new file mode 100644 index 00000000000..a22c06579d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_SC_SAFE/safe033.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe033_SC_SAFE/test.desc new file mode 100644 index 00000000000..79e9969a9a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe033.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_TSO_ALL/safe033.c b/regression/goto-instrument-wmm-core/ppc_safe033_TSO_ALL/safe033.c new file mode 100644 index 00000000000..a22c06579d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_TSO_ALL/safe033.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe033_TSO_ALL/test.desc new file mode 100644 index 00000000000..56ca9744221 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe033.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_TSO_OPC/safe033.c b/regression/goto-instrument-wmm-core/ppc_safe033_TSO_OPC/safe033.c new file mode 100644 index 00000000000..a22c06579d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_TSO_OPC/safe033.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe033_TSO_OPC/test.desc new file mode 100644 index 00000000000..7b8bfdf09e5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe033.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_TSO_OPT/safe033.c b/regression/goto-instrument-wmm-core/ppc_safe033_TSO_OPT/safe033.c new file mode 100644 index 00000000000..a22c06579d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_TSO_OPT/safe033.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe033_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe033_TSO_OPT/test.desc new file mode 100644 index 00000000000..98cfcc228be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe033_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe033.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_CAV11_ERROR/safe034.c b/regression/goto-instrument-wmm-core/ppc_safe034_CAV11_ERROR/safe034.c new file mode 100644 index 00000000000..702b87991f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_CAV11_ERROR/safe034.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe034_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..3cb7ed8e9f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe034.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_POWER_ALL/safe034.c b/regression/goto-instrument-wmm-core/ppc_safe034_POWER_ALL/safe034.c new file mode 100644 index 00000000000..702b87991f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_POWER_ALL/safe034.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe034_POWER_ALL/test.desc new file mode 100644 index 00000000000..eebc361b9c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe034.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_POWER_OPC/safe034.c b/regression/goto-instrument-wmm-core/ppc_safe034_POWER_OPC/safe034.c new file mode 100644 index 00000000000..702b87991f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_POWER_OPC/safe034.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe034_POWER_OPC/test.desc new file mode 100644 index 00000000000..50b2dc18289 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe034.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_POWER_OPT/safe034.c b/regression/goto-instrument-wmm-core/ppc_safe034_POWER_OPT/safe034.c new file mode 100644 index 00000000000..702b87991f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_POWER_OPT/safe034.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe034_POWER_OPT/test.desc new file mode 100644 index 00000000000..48617bdeb13 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe034.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_PSO_ALL/safe034.c b/regression/goto-instrument-wmm-core/ppc_safe034_PSO_ALL/safe034.c new file mode 100644 index 00000000000..702b87991f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_PSO_ALL/safe034.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe034_PSO_ALL/test.desc new file mode 100644 index 00000000000..1438bbb8bb3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe034.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_PSO_OPC/safe034.c b/regression/goto-instrument-wmm-core/ppc_safe034_PSO_OPC/safe034.c new file mode 100644 index 00000000000..702b87991f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_PSO_OPC/safe034.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe034_PSO_OPC/test.desc new file mode 100644 index 00000000000..e0e2fbcbb20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe034.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_PSO_OPT/safe034.c b/regression/goto-instrument-wmm-core/ppc_safe034_PSO_OPT/safe034.c new file mode 100644 index 00000000000..702b87991f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_PSO_OPT/safe034.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe034_PSO_OPT/test.desc new file mode 100644 index 00000000000..444049cb8c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe034.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_RMO_ALL/safe034.c b/regression/goto-instrument-wmm-core/ppc_safe034_RMO_ALL/safe034.c new file mode 100644 index 00000000000..702b87991f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_RMO_ALL/safe034.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe034_RMO_ALL/test.desc new file mode 100644 index 00000000000..a59cd9fb4db --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe034.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_RMO_OPC/safe034.c b/regression/goto-instrument-wmm-core/ppc_safe034_RMO_OPC/safe034.c new file mode 100644 index 00000000000..702b87991f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_RMO_OPC/safe034.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe034_RMO_OPC/test.desc new file mode 100644 index 00000000000..b6acc856c96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe034.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_RMO_OPT/safe034.c b/regression/goto-instrument-wmm-core/ppc_safe034_RMO_OPT/safe034.c new file mode 100644 index 00000000000..702b87991f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_RMO_OPT/safe034.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe034_RMO_OPT/test.desc new file mode 100644 index 00000000000..0288bd73b30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe034.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_SC_SAFE/safe034.c b/regression/goto-instrument-wmm-core/ppc_safe034_SC_SAFE/safe034.c new file mode 100644 index 00000000000..702b87991f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_SC_SAFE/safe034.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe034_SC_SAFE/test.desc new file mode 100644 index 00000000000..b2a9eea3b2c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe034.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_TSO_ALL/safe034.c b/regression/goto-instrument-wmm-core/ppc_safe034_TSO_ALL/safe034.c new file mode 100644 index 00000000000..702b87991f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_TSO_ALL/safe034.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe034_TSO_ALL/test.desc new file mode 100644 index 00000000000..71f7630b816 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe034.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_TSO_OPC/safe034.c b/regression/goto-instrument-wmm-core/ppc_safe034_TSO_OPC/safe034.c new file mode 100644 index 00000000000..702b87991f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_TSO_OPC/safe034.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe034_TSO_OPC/test.desc new file mode 100644 index 00000000000..c06c3172863 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe034.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_TSO_OPT/safe034.c b/regression/goto-instrument-wmm-core/ppc_safe034_TSO_OPT/safe034.c new file mode 100644 index 00000000000..702b87991f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_TSO_OPT/safe034.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe034_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe034_TSO_OPT/test.desc new file mode 100644 index 00000000000..82659f77b61 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe034_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe034.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_CAV11_ERROR/safe035.c b/regression/goto-instrument-wmm-core/ppc_safe035_CAV11_ERROR/safe035.c new file mode 100644 index 00000000000..fe6ad1c9631 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_CAV11_ERROR/safe035.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe035_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..d950eaf6c2b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_POWER_ALL/safe035.c b/regression/goto-instrument-wmm-core/ppc_safe035_POWER_ALL/safe035.c new file mode 100644 index 00000000000..fe6ad1c9631 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_POWER_ALL/safe035.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe035_POWER_ALL/test.desc new file mode 100644 index 00000000000..d3ab68ed8c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_POWER_OPC/safe035.c b/regression/goto-instrument-wmm-core/ppc_safe035_POWER_OPC/safe035.c new file mode 100644 index 00000000000..fe6ad1c9631 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_POWER_OPC/safe035.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe035_POWER_OPC/test.desc new file mode 100644 index 00000000000..9a3cdb18040 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_POWER_OPT/safe035.c b/regression/goto-instrument-wmm-core/ppc_safe035_POWER_OPT/safe035.c new file mode 100644 index 00000000000..fe6ad1c9631 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_POWER_OPT/safe035.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe035_POWER_OPT/test.desc new file mode 100644 index 00000000000..b02aeee50f9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe035.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_PSO_ALL/safe035.c b/regression/goto-instrument-wmm-core/ppc_safe035_PSO_ALL/safe035.c new file mode 100644 index 00000000000..fe6ad1c9631 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_PSO_ALL/safe035.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe035_PSO_ALL/test.desc new file mode 100644 index 00000000000..ed18b4c46c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_PSO_OPC/safe035.c b/regression/goto-instrument-wmm-core/ppc_safe035_PSO_OPC/safe035.c new file mode 100644 index 00000000000..fe6ad1c9631 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_PSO_OPC/safe035.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe035_PSO_OPC/test.desc new file mode 100644 index 00000000000..347857a2b34 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_PSO_OPT/safe035.c b/regression/goto-instrument-wmm-core/ppc_safe035_PSO_OPT/safe035.c new file mode 100644 index 00000000000..fe6ad1c9631 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_PSO_OPT/safe035.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe035_PSO_OPT/test.desc new file mode 100644 index 00000000000..8d71a481b29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe035.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_RMO_ALL/safe035.c b/regression/goto-instrument-wmm-core/ppc_safe035_RMO_ALL/safe035.c new file mode 100644 index 00000000000..fe6ad1c9631 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_RMO_ALL/safe035.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe035_RMO_ALL/test.desc new file mode 100644 index 00000000000..47350e18f17 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_RMO_OPC/safe035.c b/regression/goto-instrument-wmm-core/ppc_safe035_RMO_OPC/safe035.c new file mode 100644 index 00000000000..fe6ad1c9631 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_RMO_OPC/safe035.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe035_RMO_OPC/test.desc new file mode 100644 index 00000000000..5e14638a78b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_RMO_OPT/safe035.c b/regression/goto-instrument-wmm-core/ppc_safe035_RMO_OPT/safe035.c new file mode 100644 index 00000000000..fe6ad1c9631 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_RMO_OPT/safe035.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe035_RMO_OPT/test.desc new file mode 100644 index 00000000000..811a5149ada --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe035.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_SC_SAFE/safe035.c b/regression/goto-instrument-wmm-core/ppc_safe035_SC_SAFE/safe035.c new file mode 100644 index 00000000000..fe6ad1c9631 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_SC_SAFE/safe035.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe035_SC_SAFE/test.desc new file mode 100644 index 00000000000..9948c1807f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_TSO_ALL/safe035.c b/regression/goto-instrument-wmm-core/ppc_safe035_TSO_ALL/safe035.c new file mode 100644 index 00000000000..fe6ad1c9631 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_TSO_ALL/safe035.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe035_TSO_ALL/test.desc new file mode 100644 index 00000000000..4d49e9a4b60 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_TSO_OPC/safe035.c b/regression/goto-instrument-wmm-core/ppc_safe035_TSO_OPC/safe035.c new file mode 100644 index 00000000000..fe6ad1c9631 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_TSO_OPC/safe035.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe035_TSO_OPC/test.desc new file mode 100644 index 00000000000..1e32a5717f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_TSO_OPT/safe035.c b/regression/goto-instrument-wmm-core/ppc_safe035_TSO_OPT/safe035.c new file mode 100644 index 00000000000..fe6ad1c9631 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_TSO_OPT/safe035.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe035_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe035_TSO_OPT/test.desc new file mode 100644 index 00000000000..864bde5c4f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe035_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe035.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_CAV11_ERROR/safe036.c b/regression/goto-instrument-wmm-core/ppc_safe036_CAV11_ERROR/safe036.c new file mode 100644 index 00000000000..9e140e44c32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_CAV11_ERROR/safe036.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe036_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..100c406dbe4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_POWER_ALL/safe036.c b/regression/goto-instrument-wmm-core/ppc_safe036_POWER_ALL/safe036.c new file mode 100644 index 00000000000..9e140e44c32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_POWER_ALL/safe036.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe036_POWER_ALL/test.desc new file mode 100644 index 00000000000..b0fc4763e33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_POWER_OPC/safe036.c b/regression/goto-instrument-wmm-core/ppc_safe036_POWER_OPC/safe036.c new file mode 100644 index 00000000000..9e140e44c32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_POWER_OPC/safe036.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe036_POWER_OPC/test.desc new file mode 100644 index 00000000000..a5e652a72cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_POWER_OPT/safe036.c b/regression/goto-instrument-wmm-core/ppc_safe036_POWER_OPT/safe036.c new file mode 100644 index 00000000000..9e140e44c32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_POWER_OPT/safe036.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe036_POWER_OPT/test.desc new file mode 100644 index 00000000000..53a1d169351 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe036.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_PSO_ALL/safe036.c b/regression/goto-instrument-wmm-core/ppc_safe036_PSO_ALL/safe036.c new file mode 100644 index 00000000000..9e140e44c32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_PSO_ALL/safe036.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe036_PSO_ALL/test.desc new file mode 100644 index 00000000000..8210364ea7b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_PSO_OPC/safe036.c b/regression/goto-instrument-wmm-core/ppc_safe036_PSO_OPC/safe036.c new file mode 100644 index 00000000000..9e140e44c32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_PSO_OPC/safe036.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe036_PSO_OPC/test.desc new file mode 100644 index 00000000000..cb8fe6db8c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_PSO_OPT/safe036.c b/regression/goto-instrument-wmm-core/ppc_safe036_PSO_OPT/safe036.c new file mode 100644 index 00000000000..9e140e44c32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_PSO_OPT/safe036.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe036_PSO_OPT/test.desc new file mode 100644 index 00000000000..926e2537ee8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe036.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_RMO_ALL/safe036.c b/regression/goto-instrument-wmm-core/ppc_safe036_RMO_ALL/safe036.c new file mode 100644 index 00000000000..9e140e44c32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_RMO_ALL/safe036.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe036_RMO_ALL/test.desc new file mode 100644 index 00000000000..3d2b5462ddd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_RMO_OPC/safe036.c b/regression/goto-instrument-wmm-core/ppc_safe036_RMO_OPC/safe036.c new file mode 100644 index 00000000000..9e140e44c32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_RMO_OPC/safe036.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe036_RMO_OPC/test.desc new file mode 100644 index 00000000000..2af3db35a67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_RMO_OPT/safe036.c b/regression/goto-instrument-wmm-core/ppc_safe036_RMO_OPT/safe036.c new file mode 100644 index 00000000000..9e140e44c32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_RMO_OPT/safe036.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe036_RMO_OPT/test.desc new file mode 100644 index 00000000000..889e120c442 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe036.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_SC_SAFE/safe036.c b/regression/goto-instrument-wmm-core/ppc_safe036_SC_SAFE/safe036.c new file mode 100644 index 00000000000..9e140e44c32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_SC_SAFE/safe036.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe036_SC_SAFE/test.desc new file mode 100644 index 00000000000..17b3650d66f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_TSO_ALL/safe036.c b/regression/goto-instrument-wmm-core/ppc_safe036_TSO_ALL/safe036.c new file mode 100644 index 00000000000..9e140e44c32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_TSO_ALL/safe036.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe036_TSO_ALL/test.desc new file mode 100644 index 00000000000..e3ff5b04c40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_TSO_OPC/safe036.c b/regression/goto-instrument-wmm-core/ppc_safe036_TSO_OPC/safe036.c new file mode 100644 index 00000000000..9e140e44c32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_TSO_OPC/safe036.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe036_TSO_OPC/test.desc new file mode 100644 index 00000000000..99623014616 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_TSO_OPT/safe036.c b/regression/goto-instrument-wmm-core/ppc_safe036_TSO_OPT/safe036.c new file mode 100644 index 00000000000..9e140e44c32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_TSO_OPT/safe036.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe036_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe036_TSO_OPT/test.desc new file mode 100644 index 00000000000..118ce44c4e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe036_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe036.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_CAV11_ERROR/safe037.c b/regression/goto-instrument-wmm-core/ppc_safe037_CAV11_ERROR/safe037.c new file mode 100644 index 00000000000..bd7cfc13a32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_CAV11_ERROR/safe037.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe037_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..7c0d514dac6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe037.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_POWER_ALL/safe037.c b/regression/goto-instrument-wmm-core/ppc_safe037_POWER_ALL/safe037.c new file mode 100644 index 00000000000..bd7cfc13a32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_POWER_ALL/safe037.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe037_POWER_ALL/test.desc new file mode 100644 index 00000000000..aa501c30e11 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe037.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_POWER_OPC/safe037.c b/regression/goto-instrument-wmm-core/ppc_safe037_POWER_OPC/safe037.c new file mode 100644 index 00000000000..bd7cfc13a32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_POWER_OPC/safe037.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe037_POWER_OPC/test.desc new file mode 100644 index 00000000000..b75b6205fe0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe037.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_POWER_OPT/safe037.c b/regression/goto-instrument-wmm-core/ppc_safe037_POWER_OPT/safe037.c new file mode 100644 index 00000000000..bd7cfc13a32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_POWER_OPT/safe037.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe037_POWER_OPT/test.desc new file mode 100644 index 00000000000..6cf032c02b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe037.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_PSO_ALL/safe037.c b/regression/goto-instrument-wmm-core/ppc_safe037_PSO_ALL/safe037.c new file mode 100644 index 00000000000..bd7cfc13a32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_PSO_ALL/safe037.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe037_PSO_ALL/test.desc new file mode 100644 index 00000000000..cd0c97650bf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe037.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_PSO_OPC/safe037.c b/regression/goto-instrument-wmm-core/ppc_safe037_PSO_OPC/safe037.c new file mode 100644 index 00000000000..bd7cfc13a32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_PSO_OPC/safe037.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe037_PSO_OPC/test.desc new file mode 100644 index 00000000000..45dcd741fcf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe037.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_PSO_OPT/safe037.c b/regression/goto-instrument-wmm-core/ppc_safe037_PSO_OPT/safe037.c new file mode 100644 index 00000000000..bd7cfc13a32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_PSO_OPT/safe037.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe037_PSO_OPT/test.desc new file mode 100644 index 00000000000..504686d97f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe037.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_RMO_ALL/safe037.c b/regression/goto-instrument-wmm-core/ppc_safe037_RMO_ALL/safe037.c new file mode 100644 index 00000000000..bd7cfc13a32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_RMO_ALL/safe037.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe037_RMO_ALL/test.desc new file mode 100644 index 00000000000..b06cd8fb8af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe037.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_RMO_OPC/safe037.c b/regression/goto-instrument-wmm-core/ppc_safe037_RMO_OPC/safe037.c new file mode 100644 index 00000000000..bd7cfc13a32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_RMO_OPC/safe037.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe037_RMO_OPC/test.desc new file mode 100644 index 00000000000..c859858eb68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe037.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_RMO_OPT/safe037.c b/regression/goto-instrument-wmm-core/ppc_safe037_RMO_OPT/safe037.c new file mode 100644 index 00000000000..bd7cfc13a32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_RMO_OPT/safe037.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe037_RMO_OPT/test.desc new file mode 100644 index 00000000000..8c3f51ba045 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe037.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_SC_SAFE/safe037.c b/regression/goto-instrument-wmm-core/ppc_safe037_SC_SAFE/safe037.c new file mode 100644 index 00000000000..bd7cfc13a32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_SC_SAFE/safe037.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe037_SC_SAFE/test.desc new file mode 100644 index 00000000000..3c6d4aa0b3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe037.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_TSO_ALL/safe037.c b/regression/goto-instrument-wmm-core/ppc_safe037_TSO_ALL/safe037.c new file mode 100644 index 00000000000..bd7cfc13a32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_TSO_ALL/safe037.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe037_TSO_ALL/test.desc new file mode 100644 index 00000000000..76230871eaa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe037.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_TSO_OPC/safe037.c b/regression/goto-instrument-wmm-core/ppc_safe037_TSO_OPC/safe037.c new file mode 100644 index 00000000000..bd7cfc13a32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_TSO_OPC/safe037.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe037_TSO_OPC/test.desc new file mode 100644 index 00000000000..6979ab976c5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe037.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_TSO_OPT/safe037.c b/regression/goto-instrument-wmm-core/ppc_safe037_TSO_OPT/safe037.c new file mode 100644 index 00000000000..bd7cfc13a32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_TSO_OPT/safe037.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe037_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe037_TSO_OPT/test.desc new file mode 100644 index 00000000000..7e77be47de3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe037_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe037.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_CAV11_ERROR/safe038.c b/regression/goto-instrument-wmm-core/ppc_safe038_CAV11_ERROR/safe038.c new file mode 100644 index 00000000000..d63b28464e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_CAV11_ERROR/safe038.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe038_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..e87bd31202f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe038.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_POWER_ALL/safe038.c b/regression/goto-instrument-wmm-core/ppc_safe038_POWER_ALL/safe038.c new file mode 100644 index 00000000000..d63b28464e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_POWER_ALL/safe038.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe038_POWER_ALL/test.desc new file mode 100644 index 00000000000..c41a1fe9ae2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe038.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_POWER_OPC/safe038.c b/regression/goto-instrument-wmm-core/ppc_safe038_POWER_OPC/safe038.c new file mode 100644 index 00000000000..d63b28464e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_POWER_OPC/safe038.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe038_POWER_OPC/test.desc new file mode 100644 index 00000000000..d702d858245 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe038.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_POWER_OPT/safe038.c b/regression/goto-instrument-wmm-core/ppc_safe038_POWER_OPT/safe038.c new file mode 100644 index 00000000000..d63b28464e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_POWER_OPT/safe038.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe038_POWER_OPT/test.desc new file mode 100644 index 00000000000..f444d546f0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe038.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_PSO_ALL/safe038.c b/regression/goto-instrument-wmm-core/ppc_safe038_PSO_ALL/safe038.c new file mode 100644 index 00000000000..d63b28464e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_PSO_ALL/safe038.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe038_PSO_ALL/test.desc new file mode 100644 index 00000000000..83625d00f3a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe038.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_PSO_OPC/safe038.c b/regression/goto-instrument-wmm-core/ppc_safe038_PSO_OPC/safe038.c new file mode 100644 index 00000000000..d63b28464e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_PSO_OPC/safe038.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe038_PSO_OPC/test.desc new file mode 100644 index 00000000000..9f716eeb5c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe038.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_PSO_OPT/safe038.c b/regression/goto-instrument-wmm-core/ppc_safe038_PSO_OPT/safe038.c new file mode 100644 index 00000000000..d63b28464e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_PSO_OPT/safe038.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe038_PSO_OPT/test.desc new file mode 100644 index 00000000000..ff9274dabd2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe038.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_RMO_ALL/safe038.c b/regression/goto-instrument-wmm-core/ppc_safe038_RMO_ALL/safe038.c new file mode 100644 index 00000000000..d63b28464e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_RMO_ALL/safe038.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe038_RMO_ALL/test.desc new file mode 100644 index 00000000000..2d35abb318c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe038.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_RMO_OPC/safe038.c b/regression/goto-instrument-wmm-core/ppc_safe038_RMO_OPC/safe038.c new file mode 100644 index 00000000000..d63b28464e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_RMO_OPC/safe038.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe038_RMO_OPC/test.desc new file mode 100644 index 00000000000..ccb12b256ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe038.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_RMO_OPT/safe038.c b/regression/goto-instrument-wmm-core/ppc_safe038_RMO_OPT/safe038.c new file mode 100644 index 00000000000..d63b28464e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_RMO_OPT/safe038.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe038_RMO_OPT/test.desc new file mode 100644 index 00000000000..dcc5481d857 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe038.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_SC_SAFE/safe038.c b/regression/goto-instrument-wmm-core/ppc_safe038_SC_SAFE/safe038.c new file mode 100644 index 00000000000..d63b28464e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_SC_SAFE/safe038.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe038_SC_SAFE/test.desc new file mode 100644 index 00000000000..6aba5e5c996 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe038.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_TSO_ALL/safe038.c b/regression/goto-instrument-wmm-core/ppc_safe038_TSO_ALL/safe038.c new file mode 100644 index 00000000000..d63b28464e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_TSO_ALL/safe038.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe038_TSO_ALL/test.desc new file mode 100644 index 00000000000..b8bd2def5de --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe038.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_TSO_OPC/safe038.c b/regression/goto-instrument-wmm-core/ppc_safe038_TSO_OPC/safe038.c new file mode 100644 index 00000000000..d63b28464e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_TSO_OPC/safe038.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe038_TSO_OPC/test.desc new file mode 100644 index 00000000000..9ab5870c307 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe038.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_TSO_OPT/safe038.c b/regression/goto-instrument-wmm-core/ppc_safe038_TSO_OPT/safe038.c new file mode 100644 index 00000000000..d63b28464e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_TSO_OPT/safe038.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe038_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe038_TSO_OPT/test.desc new file mode 100644 index 00000000000..cb07374b317 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe038_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe038.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_CAV11_ERROR/safe039.c b/regression/goto-instrument-wmm-core/ppc_safe039_CAV11_ERROR/safe039.c new file mode 100644 index 00000000000..5946e0f50ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_CAV11_ERROR/safe039.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe039_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..0d7eca5da3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe039.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_POWER_ALL/safe039.c b/regression/goto-instrument-wmm-core/ppc_safe039_POWER_ALL/safe039.c new file mode 100644 index 00000000000..5946e0f50ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_POWER_ALL/safe039.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe039_POWER_ALL/test.desc new file mode 100644 index 00000000000..bddd4e99957 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe039.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_POWER_OPC/safe039.c b/regression/goto-instrument-wmm-core/ppc_safe039_POWER_OPC/safe039.c new file mode 100644 index 00000000000..5946e0f50ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_POWER_OPC/safe039.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe039_POWER_OPC/test.desc new file mode 100644 index 00000000000..b3fb9f7326f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe039.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_POWER_OPT/safe039.c b/regression/goto-instrument-wmm-core/ppc_safe039_POWER_OPT/safe039.c new file mode 100644 index 00000000000..5946e0f50ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_POWER_OPT/safe039.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe039_POWER_OPT/test.desc new file mode 100644 index 00000000000..86b966e5284 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe039.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_PSO_ALL/safe039.c b/regression/goto-instrument-wmm-core/ppc_safe039_PSO_ALL/safe039.c new file mode 100644 index 00000000000..5946e0f50ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_PSO_ALL/safe039.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe039_PSO_ALL/test.desc new file mode 100644 index 00000000000..23a065d42d5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe039.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_PSO_OPC/safe039.c b/regression/goto-instrument-wmm-core/ppc_safe039_PSO_OPC/safe039.c new file mode 100644 index 00000000000..5946e0f50ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_PSO_OPC/safe039.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe039_PSO_OPC/test.desc new file mode 100644 index 00000000000..5c47a8bf71d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe039.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_PSO_OPT/safe039.c b/regression/goto-instrument-wmm-core/ppc_safe039_PSO_OPT/safe039.c new file mode 100644 index 00000000000..5946e0f50ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_PSO_OPT/safe039.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe039_PSO_OPT/test.desc new file mode 100644 index 00000000000..aa5a2c377b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe039.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_RMO_ALL/safe039.c b/regression/goto-instrument-wmm-core/ppc_safe039_RMO_ALL/safe039.c new file mode 100644 index 00000000000..5946e0f50ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_RMO_ALL/safe039.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe039_RMO_ALL/test.desc new file mode 100644 index 00000000000..28b8f50735c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe039.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_RMO_OPC/safe039.c b/regression/goto-instrument-wmm-core/ppc_safe039_RMO_OPC/safe039.c new file mode 100644 index 00000000000..5946e0f50ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_RMO_OPC/safe039.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe039_RMO_OPC/test.desc new file mode 100644 index 00000000000..061808a9a6b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe039.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_RMO_OPT/safe039.c b/regression/goto-instrument-wmm-core/ppc_safe039_RMO_OPT/safe039.c new file mode 100644 index 00000000000..5946e0f50ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_RMO_OPT/safe039.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe039_RMO_OPT/test.desc new file mode 100644 index 00000000000..319e2ee2f99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe039.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_SC_SAFE/safe039.c b/regression/goto-instrument-wmm-core/ppc_safe039_SC_SAFE/safe039.c new file mode 100644 index 00000000000..5946e0f50ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_SC_SAFE/safe039.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe039_SC_SAFE/test.desc new file mode 100644 index 00000000000..a1689bbc0d3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe039.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_TSO_ALL/safe039.c b/regression/goto-instrument-wmm-core/ppc_safe039_TSO_ALL/safe039.c new file mode 100644 index 00000000000..5946e0f50ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_TSO_ALL/safe039.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe039_TSO_ALL/test.desc new file mode 100644 index 00000000000..17c65a48aeb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe039.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_TSO_OPC/safe039.c b/regression/goto-instrument-wmm-core/ppc_safe039_TSO_OPC/safe039.c new file mode 100644 index 00000000000..5946e0f50ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_TSO_OPC/safe039.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe039_TSO_OPC/test.desc new file mode 100644 index 00000000000..9159aa174aa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe039.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_TSO_OPT/safe039.c b/regression/goto-instrument-wmm-core/ppc_safe039_TSO_OPT/safe039.c new file mode 100644 index 00000000000..5946e0f50ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_TSO_OPT/safe039.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe039_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe039_TSO_OPT/test.desc new file mode 100644 index 00000000000..c173873cfc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe039_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe039.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_CAV11_ERROR/safe040.c b/regression/goto-instrument-wmm-core/ppc_safe040_CAV11_ERROR/safe040.c new file mode 100644 index 00000000000..d1881b96c33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_CAV11_ERROR/safe040.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe040_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..f5e6838aa88 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe040.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_POWER_ALL/safe040.c b/regression/goto-instrument-wmm-core/ppc_safe040_POWER_ALL/safe040.c new file mode 100644 index 00000000000..d1881b96c33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_POWER_ALL/safe040.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe040_POWER_ALL/test.desc new file mode 100644 index 00000000000..ef662625062 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe040.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_POWER_OPC/safe040.c b/regression/goto-instrument-wmm-core/ppc_safe040_POWER_OPC/safe040.c new file mode 100644 index 00000000000..d1881b96c33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_POWER_OPC/safe040.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe040_POWER_OPC/test.desc new file mode 100644 index 00000000000..2e4f6339a0a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe040.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_POWER_OPT/safe040.c b/regression/goto-instrument-wmm-core/ppc_safe040_POWER_OPT/safe040.c new file mode 100644 index 00000000000..d1881b96c33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_POWER_OPT/safe040.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe040_POWER_OPT/test.desc new file mode 100644 index 00000000000..5d42c61690a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe040.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_PSO_ALL/safe040.c b/regression/goto-instrument-wmm-core/ppc_safe040_PSO_ALL/safe040.c new file mode 100644 index 00000000000..d1881b96c33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_PSO_ALL/safe040.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe040_PSO_ALL/test.desc new file mode 100644 index 00000000000..a049e2fb13e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe040.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_PSO_OPC/safe040.c b/regression/goto-instrument-wmm-core/ppc_safe040_PSO_OPC/safe040.c new file mode 100644 index 00000000000..d1881b96c33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_PSO_OPC/safe040.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe040_PSO_OPC/test.desc new file mode 100644 index 00000000000..1a2043eb752 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe040.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_PSO_OPT/safe040.c b/regression/goto-instrument-wmm-core/ppc_safe040_PSO_OPT/safe040.c new file mode 100644 index 00000000000..d1881b96c33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_PSO_OPT/safe040.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe040_PSO_OPT/test.desc new file mode 100644 index 00000000000..6f4c72b6543 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe040.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_RMO_ALL/safe040.c b/regression/goto-instrument-wmm-core/ppc_safe040_RMO_ALL/safe040.c new file mode 100644 index 00000000000..d1881b96c33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_RMO_ALL/safe040.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe040_RMO_ALL/test.desc new file mode 100644 index 00000000000..04b6e3d5900 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe040.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_RMO_OPC/safe040.c b/regression/goto-instrument-wmm-core/ppc_safe040_RMO_OPC/safe040.c new file mode 100644 index 00000000000..d1881b96c33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_RMO_OPC/safe040.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe040_RMO_OPC/test.desc new file mode 100644 index 00000000000..c7e5a145b82 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe040.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_RMO_OPT/safe040.c b/regression/goto-instrument-wmm-core/ppc_safe040_RMO_OPT/safe040.c new file mode 100644 index 00000000000..d1881b96c33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_RMO_OPT/safe040.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe040_RMO_OPT/test.desc new file mode 100644 index 00000000000..6db83f8ef89 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe040.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_SC_SAFE/safe040.c b/regression/goto-instrument-wmm-core/ppc_safe040_SC_SAFE/safe040.c new file mode 100644 index 00000000000..d1881b96c33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_SC_SAFE/safe040.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe040_SC_SAFE/test.desc new file mode 100644 index 00000000000..e78edc7163f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe040.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_TSO_ALL/safe040.c b/regression/goto-instrument-wmm-core/ppc_safe040_TSO_ALL/safe040.c new file mode 100644 index 00000000000..d1881b96c33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_TSO_ALL/safe040.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe040_TSO_ALL/test.desc new file mode 100644 index 00000000000..536e69a1a96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe040.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_TSO_OPC/safe040.c b/regression/goto-instrument-wmm-core/ppc_safe040_TSO_OPC/safe040.c new file mode 100644 index 00000000000..d1881b96c33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_TSO_OPC/safe040.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe040_TSO_OPC/test.desc new file mode 100644 index 00000000000..4ce0b3d42bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe040.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_TSO_OPT/safe040.c b/regression/goto-instrument-wmm-core/ppc_safe040_TSO_OPT/safe040.c new file mode 100644 index 00000000000..d1881b96c33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_TSO_OPT/safe040.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe040_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe040_TSO_OPT/test.desc new file mode 100644 index 00000000000..e051a19c084 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe040_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe040.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_CAV11_ERROR/safe041.c b/regression/goto-instrument-wmm-core/ppc_safe041_CAV11_ERROR/safe041.c new file mode 100644 index 00000000000..fe510ff63f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_CAV11_ERROR/safe041.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe041_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..2fba94cef0a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe041.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_POWER_ALL/safe041.c b/regression/goto-instrument-wmm-core/ppc_safe041_POWER_ALL/safe041.c new file mode 100644 index 00000000000..fe510ff63f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_POWER_ALL/safe041.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe041_POWER_ALL/test.desc new file mode 100644 index 00000000000..7d4e57d1cdc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe041.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_POWER_OPC/safe041.c b/regression/goto-instrument-wmm-core/ppc_safe041_POWER_OPC/safe041.c new file mode 100644 index 00000000000..fe510ff63f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_POWER_OPC/safe041.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe041_POWER_OPC/test.desc new file mode 100644 index 00000000000..67e797952fb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe041.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_POWER_OPT/safe041.c b/regression/goto-instrument-wmm-core/ppc_safe041_POWER_OPT/safe041.c new file mode 100644 index 00000000000..fe510ff63f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_POWER_OPT/safe041.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe041_POWER_OPT/test.desc new file mode 100644 index 00000000000..d38efdb0995 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe041.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_PSO_ALL/safe041.c b/regression/goto-instrument-wmm-core/ppc_safe041_PSO_ALL/safe041.c new file mode 100644 index 00000000000..fe510ff63f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_PSO_ALL/safe041.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe041_PSO_ALL/test.desc new file mode 100644 index 00000000000..833d7ce6e4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe041.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_PSO_OPC/safe041.c b/regression/goto-instrument-wmm-core/ppc_safe041_PSO_OPC/safe041.c new file mode 100644 index 00000000000..fe510ff63f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_PSO_OPC/safe041.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe041_PSO_OPC/test.desc new file mode 100644 index 00000000000..18c178d7902 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe041.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_PSO_OPT/safe041.c b/regression/goto-instrument-wmm-core/ppc_safe041_PSO_OPT/safe041.c new file mode 100644 index 00000000000..fe510ff63f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_PSO_OPT/safe041.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe041_PSO_OPT/test.desc new file mode 100644 index 00000000000..4da3000b18d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe041.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_RMO_ALL/safe041.c b/regression/goto-instrument-wmm-core/ppc_safe041_RMO_ALL/safe041.c new file mode 100644 index 00000000000..fe510ff63f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_RMO_ALL/safe041.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe041_RMO_ALL/test.desc new file mode 100644 index 00000000000..a94f4fc51a2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe041.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_RMO_OPC/safe041.c b/regression/goto-instrument-wmm-core/ppc_safe041_RMO_OPC/safe041.c new file mode 100644 index 00000000000..fe510ff63f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_RMO_OPC/safe041.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe041_RMO_OPC/test.desc new file mode 100644 index 00000000000..c76c8577c30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe041.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_RMO_OPT/safe041.c b/regression/goto-instrument-wmm-core/ppc_safe041_RMO_OPT/safe041.c new file mode 100644 index 00000000000..fe510ff63f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_RMO_OPT/safe041.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe041_RMO_OPT/test.desc new file mode 100644 index 00000000000..b9153a8f154 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe041.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_SC_SAFE/safe041.c b/regression/goto-instrument-wmm-core/ppc_safe041_SC_SAFE/safe041.c new file mode 100644 index 00000000000..fe510ff63f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_SC_SAFE/safe041.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe041_SC_SAFE/test.desc new file mode 100644 index 00000000000..1d68bc3624c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe041.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_TSO_ALL/safe041.c b/regression/goto-instrument-wmm-core/ppc_safe041_TSO_ALL/safe041.c new file mode 100644 index 00000000000..fe510ff63f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_TSO_ALL/safe041.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe041_TSO_ALL/test.desc new file mode 100644 index 00000000000..69eb49fcd0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe041.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_TSO_OPC/safe041.c b/regression/goto-instrument-wmm-core/ppc_safe041_TSO_OPC/safe041.c new file mode 100644 index 00000000000..fe510ff63f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_TSO_OPC/safe041.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe041_TSO_OPC/test.desc new file mode 100644 index 00000000000..a2772b5c7d1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe041.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_TSO_OPT/safe041.c b/regression/goto-instrument-wmm-core/ppc_safe041_TSO_OPT/safe041.c new file mode 100644 index 00000000000..fe510ff63f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_TSO_OPT/safe041.c @@ -0,0 +1,71 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe041_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe041_TSO_OPT/test.desc new file mode 100644 index 00000000000..a30160f0714 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe041_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe041.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_CAV11_ERROR/safe042.c b/regression/goto-instrument-wmm-core/ppc_safe042_CAV11_ERROR/safe042.c new file mode 100644 index 00000000000..49ee7706c14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_CAV11_ERROR/safe042.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe042_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..b88c9c52738 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe042.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_POWER_ALL/safe042.c b/regression/goto-instrument-wmm-core/ppc_safe042_POWER_ALL/safe042.c new file mode 100644 index 00000000000..49ee7706c14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_POWER_ALL/safe042.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe042_POWER_ALL/test.desc new file mode 100644 index 00000000000..8f3b8786005 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe042.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_POWER_OPC/safe042.c b/regression/goto-instrument-wmm-core/ppc_safe042_POWER_OPC/safe042.c new file mode 100644 index 00000000000..49ee7706c14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_POWER_OPC/safe042.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe042_POWER_OPC/test.desc new file mode 100644 index 00000000000..81969029151 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe042.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_POWER_OPT/safe042.c b/regression/goto-instrument-wmm-core/ppc_safe042_POWER_OPT/safe042.c new file mode 100644 index 00000000000..49ee7706c14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_POWER_OPT/safe042.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe042_POWER_OPT/test.desc new file mode 100644 index 00000000000..6cf71d88d91 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe042.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_PSO_ALL/safe042.c b/regression/goto-instrument-wmm-core/ppc_safe042_PSO_ALL/safe042.c new file mode 100644 index 00000000000..49ee7706c14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_PSO_ALL/safe042.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe042_PSO_ALL/test.desc new file mode 100644 index 00000000000..3ba19f72a0d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe042.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_PSO_OPC/safe042.c b/regression/goto-instrument-wmm-core/ppc_safe042_PSO_OPC/safe042.c new file mode 100644 index 00000000000..49ee7706c14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_PSO_OPC/safe042.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe042_PSO_OPC/test.desc new file mode 100644 index 00000000000..51449fa2ec9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe042.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_PSO_OPT/safe042.c b/regression/goto-instrument-wmm-core/ppc_safe042_PSO_OPT/safe042.c new file mode 100644 index 00000000000..49ee7706c14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_PSO_OPT/safe042.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe042_PSO_OPT/test.desc new file mode 100644 index 00000000000..98375603e3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe042.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_RMO_ALL/safe042.c b/regression/goto-instrument-wmm-core/ppc_safe042_RMO_ALL/safe042.c new file mode 100644 index 00000000000..49ee7706c14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_RMO_ALL/safe042.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe042_RMO_ALL/test.desc new file mode 100644 index 00000000000..16815bf1e3d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe042.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_RMO_OPC/safe042.c b/regression/goto-instrument-wmm-core/ppc_safe042_RMO_OPC/safe042.c new file mode 100644 index 00000000000..49ee7706c14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_RMO_OPC/safe042.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe042_RMO_OPC/test.desc new file mode 100644 index 00000000000..eda60b44562 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe042.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_RMO_OPT/safe042.c b/regression/goto-instrument-wmm-core/ppc_safe042_RMO_OPT/safe042.c new file mode 100644 index 00000000000..49ee7706c14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_RMO_OPT/safe042.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe042_RMO_OPT/test.desc new file mode 100644 index 00000000000..1810859924a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe042.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_SC_SAFE/safe042.c b/regression/goto-instrument-wmm-core/ppc_safe042_SC_SAFE/safe042.c new file mode 100644 index 00000000000..49ee7706c14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_SC_SAFE/safe042.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe042_SC_SAFE/test.desc new file mode 100644 index 00000000000..3de83a6a449 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe042.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_TSO_ALL/safe042.c b/regression/goto-instrument-wmm-core/ppc_safe042_TSO_ALL/safe042.c new file mode 100644 index 00000000000..49ee7706c14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_TSO_ALL/safe042.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe042_TSO_ALL/test.desc new file mode 100644 index 00000000000..24f9dab6a25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe042.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_TSO_OPC/safe042.c b/regression/goto-instrument-wmm-core/ppc_safe042_TSO_OPC/safe042.c new file mode 100644 index 00000000000..49ee7706c14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_TSO_OPC/safe042.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe042_TSO_OPC/test.desc new file mode 100644 index 00000000000..6749d2deb74 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe042.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_TSO_OPT/safe042.c b/regression/goto-instrument-wmm-core/ppc_safe042_TSO_OPT/safe042.c new file mode 100644 index 00000000000..49ee7706c14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_TSO_OPT/safe042.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe042_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe042_TSO_OPT/test.desc new file mode 100644 index 00000000000..2e9945474a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe042_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe042.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_CAV11_ERROR/safe043.c b/regression/goto-instrument-wmm-core/ppc_safe043_CAV11_ERROR/safe043.c new file mode 100644 index 00000000000..95db9064ecb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_CAV11_ERROR/safe043.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe043_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..d8055f304fe --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe043.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_POWER_ALL/safe043.c b/regression/goto-instrument-wmm-core/ppc_safe043_POWER_ALL/safe043.c new file mode 100644 index 00000000000..95db9064ecb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_POWER_ALL/safe043.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe043_POWER_ALL/test.desc new file mode 100644 index 00000000000..8f838a13a08 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe043.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_POWER_OPC/safe043.c b/regression/goto-instrument-wmm-core/ppc_safe043_POWER_OPC/safe043.c new file mode 100644 index 00000000000..95db9064ecb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_POWER_OPC/safe043.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe043_POWER_OPC/test.desc new file mode 100644 index 00000000000..3b33660b231 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe043.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_POWER_OPT/safe043.c b/regression/goto-instrument-wmm-core/ppc_safe043_POWER_OPT/safe043.c new file mode 100644 index 00000000000..95db9064ecb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_POWER_OPT/safe043.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe043_POWER_OPT/test.desc new file mode 100644 index 00000000000..5ae95202178 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe043.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_PSO_ALL/safe043.c b/regression/goto-instrument-wmm-core/ppc_safe043_PSO_ALL/safe043.c new file mode 100644 index 00000000000..95db9064ecb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_PSO_ALL/safe043.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe043_PSO_ALL/test.desc new file mode 100644 index 00000000000..13d5c8a230d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe043.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_PSO_OPC/safe043.c b/regression/goto-instrument-wmm-core/ppc_safe043_PSO_OPC/safe043.c new file mode 100644 index 00000000000..95db9064ecb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_PSO_OPC/safe043.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe043_PSO_OPC/test.desc new file mode 100644 index 00000000000..1e89bde9a9c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe043.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_PSO_OPT/safe043.c b/regression/goto-instrument-wmm-core/ppc_safe043_PSO_OPT/safe043.c new file mode 100644 index 00000000000..95db9064ecb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_PSO_OPT/safe043.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe043_PSO_OPT/test.desc new file mode 100644 index 00000000000..998a495e986 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe043.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_RMO_ALL/safe043.c b/regression/goto-instrument-wmm-core/ppc_safe043_RMO_ALL/safe043.c new file mode 100644 index 00000000000..95db9064ecb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_RMO_ALL/safe043.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe043_RMO_ALL/test.desc new file mode 100644 index 00000000000..856b4d19d66 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe043.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_RMO_OPC/safe043.c b/regression/goto-instrument-wmm-core/ppc_safe043_RMO_OPC/safe043.c new file mode 100644 index 00000000000..95db9064ecb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_RMO_OPC/safe043.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe043_RMO_OPC/test.desc new file mode 100644 index 00000000000..13c8f09c6e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe043.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_RMO_OPT/safe043.c b/regression/goto-instrument-wmm-core/ppc_safe043_RMO_OPT/safe043.c new file mode 100644 index 00000000000..95db9064ecb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_RMO_OPT/safe043.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe043_RMO_OPT/test.desc new file mode 100644 index 00000000000..fda8545dbe0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe043.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_SC_SAFE/safe043.c b/regression/goto-instrument-wmm-core/ppc_safe043_SC_SAFE/safe043.c new file mode 100644 index 00000000000..95db9064ecb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_SC_SAFE/safe043.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe043_SC_SAFE/test.desc new file mode 100644 index 00000000000..1d8223803a9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe043.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_TSO_ALL/safe043.c b/regression/goto-instrument-wmm-core/ppc_safe043_TSO_ALL/safe043.c new file mode 100644 index 00000000000..95db9064ecb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_TSO_ALL/safe043.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe043_TSO_ALL/test.desc new file mode 100644 index 00000000000..c20ecb7536b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe043.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_TSO_OPC/safe043.c b/regression/goto-instrument-wmm-core/ppc_safe043_TSO_OPC/safe043.c new file mode 100644 index 00000000000..95db9064ecb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_TSO_OPC/safe043.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe043_TSO_OPC/test.desc new file mode 100644 index 00000000000..419900ed1f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe043.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_TSO_OPT/safe043.c b/regression/goto-instrument-wmm-core/ppc_safe043_TSO_OPT/safe043.c new file mode 100644 index 00000000000..95db9064ecb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_TSO_OPT/safe043.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe043_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe043_TSO_OPT/test.desc new file mode 100644 index 00000000000..cbe0c4cda55 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe043_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe043.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_CAV11_ERROR/safe044.c b/regression/goto-instrument-wmm-core/ppc_safe044_CAV11_ERROR/safe044.c new file mode 100644 index 00000000000..b9a0e3761c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_CAV11_ERROR/safe044.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe044_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..94c86160f5e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe044.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_POWER_ALL/safe044.c b/regression/goto-instrument-wmm-core/ppc_safe044_POWER_ALL/safe044.c new file mode 100644 index 00000000000..b9a0e3761c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_POWER_ALL/safe044.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe044_POWER_ALL/test.desc new file mode 100644 index 00000000000..ab18df533b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe044.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_POWER_OPC/safe044.c b/regression/goto-instrument-wmm-core/ppc_safe044_POWER_OPC/safe044.c new file mode 100644 index 00000000000..b9a0e3761c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_POWER_OPC/safe044.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe044_POWER_OPC/test.desc new file mode 100644 index 00000000000..44cd26fbe39 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe044.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe044_POWER_OPT/test.desc index a9dbc0c1fde..22bf3781771 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe044_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe044_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe044.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_PSO_ALL/safe044.c b/regression/goto-instrument-wmm-core/ppc_safe044_PSO_ALL/safe044.c new file mode 100644 index 00000000000..b9a0e3761c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_PSO_ALL/safe044.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe044_PSO_ALL/test.desc new file mode 100644 index 00000000000..d841c0fac09 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe044.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_PSO_OPC/safe044.c b/regression/goto-instrument-wmm-core/ppc_safe044_PSO_OPC/safe044.c new file mode 100644 index 00000000000..b9a0e3761c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_PSO_OPC/safe044.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe044_PSO_OPC/test.desc new file mode 100644 index 00000000000..20878d87ddd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe044.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_PSO_OPT/safe044.c b/regression/goto-instrument-wmm-core/ppc_safe044_PSO_OPT/safe044.c new file mode 100644 index 00000000000..b9a0e3761c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_PSO_OPT/safe044.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe044_PSO_OPT/test.desc new file mode 100644 index 00000000000..ec9a968a6a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe044.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_RMO_ALL/safe044.c b/regression/goto-instrument-wmm-core/ppc_safe044_RMO_ALL/safe044.c new file mode 100644 index 00000000000..b9a0e3761c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_RMO_ALL/safe044.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe044_RMO_ALL/test.desc new file mode 100644 index 00000000000..17c4c23e0ca --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe044.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_RMO_OPC/safe044.c b/regression/goto-instrument-wmm-core/ppc_safe044_RMO_OPC/safe044.c new file mode 100644 index 00000000000..b9a0e3761c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_RMO_OPC/safe044.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe044_RMO_OPC/test.desc new file mode 100644 index 00000000000..1a75c870454 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe044.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_RMO_OPT/safe044.c b/regression/goto-instrument-wmm-core/ppc_safe044_RMO_OPT/safe044.c new file mode 100644 index 00000000000..b9a0e3761c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_RMO_OPT/safe044.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe044_RMO_OPT/test.desc new file mode 100644 index 00000000000..f4988ef296b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe044.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_SC_SAFE/safe044.c b/regression/goto-instrument-wmm-core/ppc_safe044_SC_SAFE/safe044.c new file mode 100644 index 00000000000..b9a0e3761c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_SC_SAFE/safe044.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe044_SC_SAFE/test.desc new file mode 100644 index 00000000000..bd75f251f6b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe044.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_TSO_ALL/safe044.c b/regression/goto-instrument-wmm-core/ppc_safe044_TSO_ALL/safe044.c new file mode 100644 index 00000000000..b9a0e3761c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_TSO_ALL/safe044.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe044_TSO_ALL/test.desc new file mode 100644 index 00000000000..5a1bea3b035 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe044.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_TSO_OPC/safe044.c b/regression/goto-instrument-wmm-core/ppc_safe044_TSO_OPC/safe044.c new file mode 100644 index 00000000000..b9a0e3761c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_TSO_OPC/safe044.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe044_TSO_OPC/test.desc new file mode 100644 index 00000000000..9aa45ba11d6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe044.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_TSO_OPT/safe044.c b/regression/goto-instrument-wmm-core/ppc_safe044_TSO_OPT/safe044.c new file mode 100644 index 00000000000..b9a0e3761c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_TSO_OPT/safe044.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&x + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe044_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe044_TSO_OPT/test.desc new file mode 100644 index 00000000000..cfb2518cc7b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe044_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe044.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_CAV11_ERROR/safe045.c b/regression/goto-instrument-wmm-core/ppc_safe045_CAV11_ERROR/safe045.c new file mode 100644 index 00000000000..18c53fac9bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_CAV11_ERROR/safe045.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe045_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..6b7a4ce2f03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe045.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_POWER_ALL/safe045.c b/regression/goto-instrument-wmm-core/ppc_safe045_POWER_ALL/safe045.c new file mode 100644 index 00000000000..18c53fac9bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_POWER_ALL/safe045.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe045_POWER_ALL/test.desc new file mode 100644 index 00000000000..6e1a1d78f27 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe045.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_POWER_OPC/safe045.c b/regression/goto-instrument-wmm-core/ppc_safe045_POWER_OPC/safe045.c new file mode 100644 index 00000000000..18c53fac9bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_POWER_OPC/safe045.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe045_POWER_OPC/test.desc new file mode 100644 index 00000000000..e4be7ffae2d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe045.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_POWER_OPT/safe045.c b/regression/goto-instrument-wmm-core/ppc_safe045_POWER_OPT/safe045.c new file mode 100644 index 00000000000..18c53fac9bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_POWER_OPT/safe045.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe045_POWER_OPT/test.desc new file mode 100644 index 00000000000..1269e51e90b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe045.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_PSO_ALL/safe045.c b/regression/goto-instrument-wmm-core/ppc_safe045_PSO_ALL/safe045.c new file mode 100644 index 00000000000..18c53fac9bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_PSO_ALL/safe045.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe045_PSO_ALL/test.desc new file mode 100644 index 00000000000..4b61f420b14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe045.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_PSO_OPC/safe045.c b/regression/goto-instrument-wmm-core/ppc_safe045_PSO_OPC/safe045.c new file mode 100644 index 00000000000..18c53fac9bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_PSO_OPC/safe045.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe045_PSO_OPC/test.desc new file mode 100644 index 00000000000..64b12cf8bc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe045.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_PSO_OPT/safe045.c b/regression/goto-instrument-wmm-core/ppc_safe045_PSO_OPT/safe045.c new file mode 100644 index 00000000000..18c53fac9bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_PSO_OPT/safe045.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe045_PSO_OPT/test.desc new file mode 100644 index 00000000000..406054d2fac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe045.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_RMO_ALL/safe045.c b/regression/goto-instrument-wmm-core/ppc_safe045_RMO_ALL/safe045.c new file mode 100644 index 00000000000..18c53fac9bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_RMO_ALL/safe045.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe045_RMO_ALL/test.desc new file mode 100644 index 00000000000..b8044fb67f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe045.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_RMO_OPC/safe045.c b/regression/goto-instrument-wmm-core/ppc_safe045_RMO_OPC/safe045.c new file mode 100644 index 00000000000..18c53fac9bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_RMO_OPC/safe045.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe045_RMO_OPC/test.desc new file mode 100644 index 00000000000..fade577eeac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe045.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_RMO_OPT/safe045.c b/regression/goto-instrument-wmm-core/ppc_safe045_RMO_OPT/safe045.c new file mode 100644 index 00000000000..18c53fac9bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_RMO_OPT/safe045.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe045_RMO_OPT/test.desc new file mode 100644 index 00000000000..d9d63df04c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe045.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_SC_SAFE/safe045.c b/regression/goto-instrument-wmm-core/ppc_safe045_SC_SAFE/safe045.c new file mode 100644 index 00000000000..18c53fac9bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_SC_SAFE/safe045.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe045_SC_SAFE/test.desc new file mode 100644 index 00000000000..c86151edca0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe045.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_TSO_ALL/safe045.c b/regression/goto-instrument-wmm-core/ppc_safe045_TSO_ALL/safe045.c new file mode 100644 index 00000000000..18c53fac9bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_TSO_ALL/safe045.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe045_TSO_ALL/test.desc new file mode 100644 index 00000000000..6d8f11d5bb2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe045.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_TSO_OPC/safe045.c b/regression/goto-instrument-wmm-core/ppc_safe045_TSO_OPC/safe045.c new file mode 100644 index 00000000000..18c53fac9bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_TSO_OPC/safe045.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe045_TSO_OPC/test.desc new file mode 100644 index 00000000000..38394a80d2e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe045.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_TSO_OPT/safe045.c b/regression/goto-instrument-wmm-core/ppc_safe045_TSO_OPT/safe045.c new file mode 100644 index 00000000000..18c53fac9bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_TSO_OPT/safe045.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe045_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe045_TSO_OPT/test.desc new file mode 100644 index 00000000000..50750f5887b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe045_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe045.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_CAV11_ERROR/safe046.c b/regression/goto-instrument-wmm-core/ppc_safe046_CAV11_ERROR/safe046.c new file mode 100644 index 00000000000..b47a4870561 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_CAV11_ERROR/safe046.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe046_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..412534c2f3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe046.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_POWER_ALL/safe046.c b/regression/goto-instrument-wmm-core/ppc_safe046_POWER_ALL/safe046.c new file mode 100644 index 00000000000..b47a4870561 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_POWER_ALL/safe046.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe046_POWER_ALL/test.desc new file mode 100644 index 00000000000..7f03c7fe3ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe046.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_POWER_OPC/safe046.c b/regression/goto-instrument-wmm-core/ppc_safe046_POWER_OPC/safe046.c new file mode 100644 index 00000000000..b47a4870561 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_POWER_OPC/safe046.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe046_POWER_OPC/test.desc new file mode 100644 index 00000000000..a11cddeff20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe046.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_POWER_OPT/safe046.c b/regression/goto-instrument-wmm-core/ppc_safe046_POWER_OPT/safe046.c new file mode 100644 index 00000000000..b47a4870561 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_POWER_OPT/safe046.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe046_POWER_OPT/test.desc new file mode 100644 index 00000000000..e196edfcce0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe046.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_PSO_ALL/safe046.c b/regression/goto-instrument-wmm-core/ppc_safe046_PSO_ALL/safe046.c new file mode 100644 index 00000000000..b47a4870561 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_PSO_ALL/safe046.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe046_PSO_ALL/test.desc new file mode 100644 index 00000000000..bf8f2676dbb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe046.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_PSO_OPC/safe046.c b/regression/goto-instrument-wmm-core/ppc_safe046_PSO_OPC/safe046.c new file mode 100644 index 00000000000..b47a4870561 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_PSO_OPC/safe046.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe046_PSO_OPC/test.desc new file mode 100644 index 00000000000..f2c921df2a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe046.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_PSO_OPT/safe046.c b/regression/goto-instrument-wmm-core/ppc_safe046_PSO_OPT/safe046.c new file mode 100644 index 00000000000..b47a4870561 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_PSO_OPT/safe046.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe046_PSO_OPT/test.desc new file mode 100644 index 00000000000..c5197b482a2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe046.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_RMO_ALL/safe046.c b/regression/goto-instrument-wmm-core/ppc_safe046_RMO_ALL/safe046.c new file mode 100644 index 00000000000..b47a4870561 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_RMO_ALL/safe046.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe046_RMO_ALL/test.desc new file mode 100644 index 00000000000..70eb7295cc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe046.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_RMO_OPC/safe046.c b/regression/goto-instrument-wmm-core/ppc_safe046_RMO_OPC/safe046.c new file mode 100644 index 00000000000..b47a4870561 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_RMO_OPC/safe046.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe046_RMO_OPC/test.desc new file mode 100644 index 00000000000..ee900c75c34 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe046.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_RMO_OPT/safe046.c b/regression/goto-instrument-wmm-core/ppc_safe046_RMO_OPT/safe046.c new file mode 100644 index 00000000000..b47a4870561 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_RMO_OPT/safe046.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe046_RMO_OPT/test.desc new file mode 100644 index 00000000000..ca75bb19d78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe046.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_SC_SAFE/safe046.c b/regression/goto-instrument-wmm-core/ppc_safe046_SC_SAFE/safe046.c new file mode 100644 index 00000000000..b47a4870561 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_SC_SAFE/safe046.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe046_SC_SAFE/test.desc new file mode 100644 index 00000000000..62310d43320 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe046.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_TSO_ALL/safe046.c b/regression/goto-instrument-wmm-core/ppc_safe046_TSO_ALL/safe046.c new file mode 100644 index 00000000000..b47a4870561 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_TSO_ALL/safe046.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe046_TSO_ALL/test.desc new file mode 100644 index 00000000000..853285b1320 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe046.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_TSO_OPC/safe046.c b/regression/goto-instrument-wmm-core/ppc_safe046_TSO_OPC/safe046.c new file mode 100644 index 00000000000..b47a4870561 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_TSO_OPC/safe046.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe046_TSO_OPC/test.desc new file mode 100644 index 00000000000..49cdf54a119 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe046.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_TSO_OPT/safe046.c b/regression/goto-instrument-wmm-core/ppc_safe046_TSO_OPT/safe046.c new file mode 100644 index 00000000000..b47a4870561 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_TSO_OPT/safe046.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe046_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe046_TSO_OPT/test.desc new file mode 100644 index 00000000000..11e88d88f13 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe046_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe046.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_CAV11_ERROR/safe047.c b/regression/goto-instrument-wmm-core/ppc_safe047_CAV11_ERROR/safe047.c new file mode 100644 index 00000000000..a59c56c695e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_CAV11_ERROR/safe047.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe047_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..66f65eff9a2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe047.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_POWER_ALL/safe047.c b/regression/goto-instrument-wmm-core/ppc_safe047_POWER_ALL/safe047.c new file mode 100644 index 00000000000..a59c56c695e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_POWER_ALL/safe047.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe047_POWER_ALL/test.desc new file mode 100644 index 00000000000..b23e4bf3db8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe047.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_POWER_OPC/safe047.c b/regression/goto-instrument-wmm-core/ppc_safe047_POWER_OPC/safe047.c new file mode 100644 index 00000000000..a59c56c695e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_POWER_OPC/safe047.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe047_POWER_OPC/test.desc new file mode 100644 index 00000000000..dc0c494256c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe047.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_POWER_OPT/safe047.c b/regression/goto-instrument-wmm-core/ppc_safe047_POWER_OPT/safe047.c new file mode 100644 index 00000000000..a59c56c695e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_POWER_OPT/safe047.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe047_POWER_OPT/test.desc new file mode 100644 index 00000000000..0bab4b09717 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe047.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_PSO_ALL/safe047.c b/regression/goto-instrument-wmm-core/ppc_safe047_PSO_ALL/safe047.c new file mode 100644 index 00000000000..a59c56c695e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_PSO_ALL/safe047.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe047_PSO_ALL/test.desc new file mode 100644 index 00000000000..afa7186170f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe047.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_PSO_OPC/safe047.c b/regression/goto-instrument-wmm-core/ppc_safe047_PSO_OPC/safe047.c new file mode 100644 index 00000000000..a59c56c695e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_PSO_OPC/safe047.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe047_PSO_OPC/test.desc new file mode 100644 index 00000000000..d4a65aa4fb3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe047.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_PSO_OPT/safe047.c b/regression/goto-instrument-wmm-core/ppc_safe047_PSO_OPT/safe047.c new file mode 100644 index 00000000000..a59c56c695e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_PSO_OPT/safe047.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe047_PSO_OPT/test.desc new file mode 100644 index 00000000000..09c57866907 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe047.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_RMO_ALL/safe047.c b/regression/goto-instrument-wmm-core/ppc_safe047_RMO_ALL/safe047.c new file mode 100644 index 00000000000..a59c56c695e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_RMO_ALL/safe047.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe047_RMO_ALL/test.desc new file mode 100644 index 00000000000..f42c208ef85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe047.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_RMO_OPC/safe047.c b/regression/goto-instrument-wmm-core/ppc_safe047_RMO_OPC/safe047.c new file mode 100644 index 00000000000..a59c56c695e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_RMO_OPC/safe047.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe047_RMO_OPC/test.desc new file mode 100644 index 00000000000..d0ab0a50383 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe047.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_RMO_OPT/safe047.c b/regression/goto-instrument-wmm-core/ppc_safe047_RMO_OPT/safe047.c new file mode 100644 index 00000000000..a59c56c695e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_RMO_OPT/safe047.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe047_RMO_OPT/test.desc new file mode 100644 index 00000000000..25771f70fd8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe047.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_SC_SAFE/safe047.c b/regression/goto-instrument-wmm-core/ppc_safe047_SC_SAFE/safe047.c new file mode 100644 index 00000000000..a59c56c695e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_SC_SAFE/safe047.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe047_SC_SAFE/test.desc new file mode 100644 index 00000000000..2d292d4030d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe047.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_TSO_ALL/safe047.c b/regression/goto-instrument-wmm-core/ppc_safe047_TSO_ALL/safe047.c new file mode 100644 index 00000000000..a59c56c695e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_TSO_ALL/safe047.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe047_TSO_ALL/test.desc new file mode 100644 index 00000000000..3acd4020a76 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe047.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_TSO_OPC/safe047.c b/regression/goto-instrument-wmm-core/ppc_safe047_TSO_OPC/safe047.c new file mode 100644 index 00000000000..a59c56c695e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_TSO_OPC/safe047.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe047_TSO_OPC/test.desc new file mode 100644 index 00000000000..647a45e5776 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe047.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_TSO_OPT/safe047.c b/regression/goto-instrument-wmm-core/ppc_safe047_TSO_OPT/safe047.c new file mode 100644 index 00000000000..a59c56c695e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_TSO_OPT/safe047.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe047_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe047_TSO_OPT/test.desc new file mode 100644 index 00000000000..8fc44b94184 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe047_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe047.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_CAV11_ERROR/safe048.c b/regression/goto-instrument-wmm-core/ppc_safe048_CAV11_ERROR/safe048.c new file mode 100644 index 00000000000..e49d6e4e77f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_CAV11_ERROR/safe048.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe048_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..8d6f3009b37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe048.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_POWER_ALL/safe048.c b/regression/goto-instrument-wmm-core/ppc_safe048_POWER_ALL/safe048.c new file mode 100644 index 00000000000..e49d6e4e77f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_POWER_ALL/safe048.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe048_POWER_ALL/test.desc new file mode 100644 index 00000000000..545b69aacd4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe048.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_POWER_OPC/safe048.c b/regression/goto-instrument-wmm-core/ppc_safe048_POWER_OPC/safe048.c new file mode 100644 index 00000000000..e49d6e4e77f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_POWER_OPC/safe048.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe048_POWER_OPC/test.desc new file mode 100644 index 00000000000..518901796d6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe048.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_POWER_OPT/safe048.c b/regression/goto-instrument-wmm-core/ppc_safe048_POWER_OPT/safe048.c new file mode 100644 index 00000000000..e49d6e4e77f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_POWER_OPT/safe048.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe048_POWER_OPT/test.desc new file mode 100644 index 00000000000..8846a899582 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe048.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_PSO_ALL/safe048.c b/regression/goto-instrument-wmm-core/ppc_safe048_PSO_ALL/safe048.c new file mode 100644 index 00000000000..e49d6e4e77f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_PSO_ALL/safe048.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe048_PSO_ALL/test.desc new file mode 100644 index 00000000000..a6d4442d423 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe048.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_PSO_OPC/safe048.c b/regression/goto-instrument-wmm-core/ppc_safe048_PSO_OPC/safe048.c new file mode 100644 index 00000000000..e49d6e4e77f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_PSO_OPC/safe048.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe048_PSO_OPC/test.desc new file mode 100644 index 00000000000..9d4af344407 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe048.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_PSO_OPT/safe048.c b/regression/goto-instrument-wmm-core/ppc_safe048_PSO_OPT/safe048.c new file mode 100644 index 00000000000..e49d6e4e77f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_PSO_OPT/safe048.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe048_PSO_OPT/test.desc new file mode 100644 index 00000000000..4ea43433a9c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe048.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_RMO_ALL/safe048.c b/regression/goto-instrument-wmm-core/ppc_safe048_RMO_ALL/safe048.c new file mode 100644 index 00000000000..e49d6e4e77f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_RMO_ALL/safe048.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe048_RMO_ALL/test.desc new file mode 100644 index 00000000000..c29aec0909e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe048.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_RMO_OPC/safe048.c b/regression/goto-instrument-wmm-core/ppc_safe048_RMO_OPC/safe048.c new file mode 100644 index 00000000000..e49d6e4e77f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_RMO_OPC/safe048.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe048_RMO_OPC/test.desc new file mode 100644 index 00000000000..a35e8b4b0f2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe048.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_RMO_OPT/safe048.c b/regression/goto-instrument-wmm-core/ppc_safe048_RMO_OPT/safe048.c new file mode 100644 index 00000000000..e49d6e4e77f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_RMO_OPT/safe048.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe048_RMO_OPT/test.desc new file mode 100644 index 00000000000..f7b7534e064 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe048.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_SC_SAFE/safe048.c b/regression/goto-instrument-wmm-core/ppc_safe048_SC_SAFE/safe048.c new file mode 100644 index 00000000000..e49d6e4e77f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_SC_SAFE/safe048.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe048_SC_SAFE/test.desc new file mode 100644 index 00000000000..b114ce3c30b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe048.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_TSO_ALL/safe048.c b/regression/goto-instrument-wmm-core/ppc_safe048_TSO_ALL/safe048.c new file mode 100644 index 00000000000..e49d6e4e77f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_TSO_ALL/safe048.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe048_TSO_ALL/test.desc new file mode 100644 index 00000000000..4440e66f82a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe048.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_TSO_OPC/safe048.c b/regression/goto-instrument-wmm-core/ppc_safe048_TSO_OPC/safe048.c new file mode 100644 index 00000000000..e49d6e4e77f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_TSO_OPC/safe048.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe048_TSO_OPC/test.desc new file mode 100644 index 00000000000..23a86f453af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe048.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_TSO_OPT/safe048.c b/regression/goto-instrument-wmm-core/ppc_safe048_TSO_OPT/safe048.c new file mode 100644 index 00000000000..e49d6e4e77f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_TSO_OPT/safe048.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe048_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe048_TSO_OPT/test.desc new file mode 100644 index 00000000000..da7d9391243 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe048_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe048.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_CAV11_SAFE/safe049.c b/regression/goto-instrument-wmm-core/ppc_safe049_CAV11_SAFE/safe049.c new file mode 100644 index 00000000000..d09ef074f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_CAV11_SAFE/safe049.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe049_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..a28dab14922 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe049.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_POWER_ALL/safe049.c b/regression/goto-instrument-wmm-core/ppc_safe049_POWER_ALL/safe049.c new file mode 100644 index 00000000000..d09ef074f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_POWER_ALL/safe049.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe049_POWER_ALL/test.desc new file mode 100644 index 00000000000..fb04250c91d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe049.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_POWER_OPC/safe049.c b/regression/goto-instrument-wmm-core/ppc_safe049_POWER_OPC/safe049.c new file mode 100644 index 00000000000..d09ef074f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_POWER_OPC/safe049.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe049_POWER_OPC/test.desc new file mode 100644 index 00000000000..ae5473d82cc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe049.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe049_POWER_OPT/test.desc index 841db8066c3..9db09bf29e3 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe049_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe049_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe049.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_PSO_ALL/safe049.c b/regression/goto-instrument-wmm-core/ppc_safe049_PSO_ALL/safe049.c new file mode 100644 index 00000000000..d09ef074f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_PSO_ALL/safe049.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe049_PSO_ALL/test.desc new file mode 100644 index 00000000000..3ccd6824ad8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe049.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_PSO_OPC/safe049.c b/regression/goto-instrument-wmm-core/ppc_safe049_PSO_OPC/safe049.c new file mode 100644 index 00000000000..d09ef074f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_PSO_OPC/safe049.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe049_PSO_OPC/test.desc new file mode 100644 index 00000000000..d560f55e9ce --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe049.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_PSO_OPT/safe049.c b/regression/goto-instrument-wmm-core/ppc_safe049_PSO_OPT/safe049.c new file mode 100644 index 00000000000..d09ef074f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_PSO_OPT/safe049.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe049_PSO_OPT/test.desc new file mode 100644 index 00000000000..fc67a9188c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe049.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_RMO_ALL/safe049.c b/regression/goto-instrument-wmm-core/ppc_safe049_RMO_ALL/safe049.c new file mode 100644 index 00000000000..d09ef074f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_RMO_ALL/safe049.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe049_RMO_ALL/test.desc new file mode 100644 index 00000000000..19839d09de2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe049.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_RMO_OPC/safe049.c b/regression/goto-instrument-wmm-core/ppc_safe049_RMO_OPC/safe049.c new file mode 100644 index 00000000000..d09ef074f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_RMO_OPC/safe049.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe049_RMO_OPC/test.desc new file mode 100644 index 00000000000..aed2e1205c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe049.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_RMO_OPT/safe049.c b/regression/goto-instrument-wmm-core/ppc_safe049_RMO_OPT/safe049.c new file mode 100644 index 00000000000..d09ef074f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_RMO_OPT/safe049.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe049_RMO_OPT/test.desc new file mode 100644 index 00000000000..55d36e01590 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe049.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_SC_SAFE/safe049.c b/regression/goto-instrument-wmm-core/ppc_safe049_SC_SAFE/safe049.c new file mode 100644 index 00000000000..d09ef074f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_SC_SAFE/safe049.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe049_SC_SAFE/test.desc new file mode 100644 index 00000000000..e219288cd44 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe049.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_TSO_ALL/safe049.c b/regression/goto-instrument-wmm-core/ppc_safe049_TSO_ALL/safe049.c new file mode 100644 index 00000000000..d09ef074f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_TSO_ALL/safe049.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe049_TSO_ALL/test.desc new file mode 100644 index 00000000000..bf33e97262e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe049.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_TSO_OPC/safe049.c b/regression/goto-instrument-wmm-core/ppc_safe049_TSO_OPC/safe049.c new file mode 100644 index 00000000000..d09ef074f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_TSO_OPC/safe049.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe049_TSO_OPC/test.desc new file mode 100644 index 00000000000..273f729a8d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe049.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_TSO_OPT/safe049.c b/regression/goto-instrument-wmm-core/ppc_safe049_TSO_OPT/safe049.c new file mode 100644 index 00000000000..d09ef074f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_TSO_OPT/safe049.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe049_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe049_TSO_OPT/test.desc new file mode 100644 index 00000000000..0ab647d19f2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe049_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe049.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_CAV11_ERROR/safe050.c b/regression/goto-instrument-wmm-core/ppc_safe050_CAV11_ERROR/safe050.c new file mode 100644 index 00000000000..843de95de03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_CAV11_ERROR/safe050.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe050_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..e09331bc153 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe050.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_POWER_ALL/safe050.c b/regression/goto-instrument-wmm-core/ppc_safe050_POWER_ALL/safe050.c new file mode 100644 index 00000000000..843de95de03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_POWER_ALL/safe050.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe050_POWER_ALL/test.desc new file mode 100644 index 00000000000..0f02bb08985 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe050.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_POWER_OPC/safe050.c b/regression/goto-instrument-wmm-core/ppc_safe050_POWER_OPC/safe050.c new file mode 100644 index 00000000000..843de95de03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_POWER_OPC/safe050.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe050_POWER_OPC/test.desc new file mode 100644 index 00000000000..5c40b6279c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe050.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_POWER_OPT/safe050.c b/regression/goto-instrument-wmm-core/ppc_safe050_POWER_OPT/safe050.c new file mode 100644 index 00000000000..843de95de03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_POWER_OPT/safe050.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe050_POWER_OPT/test.desc new file mode 100644 index 00000000000..6e6f447dd94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe050.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_PSO_ALL/safe050.c b/regression/goto-instrument-wmm-core/ppc_safe050_PSO_ALL/safe050.c new file mode 100644 index 00000000000..843de95de03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_PSO_ALL/safe050.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe050_PSO_ALL/test.desc new file mode 100644 index 00000000000..f73103f8fef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe050.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_PSO_OPC/safe050.c b/regression/goto-instrument-wmm-core/ppc_safe050_PSO_OPC/safe050.c new file mode 100644 index 00000000000..843de95de03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_PSO_OPC/safe050.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe050_PSO_OPC/test.desc new file mode 100644 index 00000000000..a0f2243989d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe050.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_PSO_OPT/safe050.c b/regression/goto-instrument-wmm-core/ppc_safe050_PSO_OPT/safe050.c new file mode 100644 index 00000000000..843de95de03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_PSO_OPT/safe050.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe050_PSO_OPT/test.desc new file mode 100644 index 00000000000..a52c9914a7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe050.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_RMO_ALL/safe050.c b/regression/goto-instrument-wmm-core/ppc_safe050_RMO_ALL/safe050.c new file mode 100644 index 00000000000..843de95de03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_RMO_ALL/safe050.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe050_RMO_ALL/test.desc new file mode 100644 index 00000000000..b75c0a855e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe050.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_RMO_OPC/safe050.c b/regression/goto-instrument-wmm-core/ppc_safe050_RMO_OPC/safe050.c new file mode 100644 index 00000000000..843de95de03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_RMO_OPC/safe050.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe050_RMO_OPC/test.desc new file mode 100644 index 00000000000..3b647433254 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe050.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_RMO_OPT/safe050.c b/regression/goto-instrument-wmm-core/ppc_safe050_RMO_OPT/safe050.c new file mode 100644 index 00000000000..843de95de03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_RMO_OPT/safe050.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe050_RMO_OPT/test.desc new file mode 100644 index 00000000000..3fd84d3d338 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe050.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_SC_SAFE/safe050.c b/regression/goto-instrument-wmm-core/ppc_safe050_SC_SAFE/safe050.c new file mode 100644 index 00000000000..843de95de03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_SC_SAFE/safe050.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe050_SC_SAFE/test.desc new file mode 100644 index 00000000000..42fea6313e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe050.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_TSO_ALL/safe050.c b/regression/goto-instrument-wmm-core/ppc_safe050_TSO_ALL/safe050.c new file mode 100644 index 00000000000..843de95de03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_TSO_ALL/safe050.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe050_TSO_ALL/test.desc new file mode 100644 index 00000000000..53f11930fb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe050.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_TSO_OPC/safe050.c b/regression/goto-instrument-wmm-core/ppc_safe050_TSO_OPC/safe050.c new file mode 100644 index 00000000000..843de95de03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_TSO_OPC/safe050.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe050_TSO_OPC/test.desc new file mode 100644 index 00000000000..e4dd66d2ed8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe050.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_TSO_OPT/safe050.c b/regression/goto-instrument-wmm-core/ppc_safe050_TSO_OPT/safe050.c new file mode 100644 index 00000000000..843de95de03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_TSO_OPT/safe050.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe050_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe050_TSO_OPT/test.desc new file mode 100644 index 00000000000..5f11985838e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe050_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe050.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_CAV11_ERROR/safe051.c b/regression/goto-instrument-wmm-core/ppc_safe051_CAV11_ERROR/safe051.c new file mode 100644 index 00000000000..9480c34c25f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_CAV11_ERROR/safe051.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe051_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..ec4e819aabf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe051.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_POWER_ALL/safe051.c b/regression/goto-instrument-wmm-core/ppc_safe051_POWER_ALL/safe051.c new file mode 100644 index 00000000000..9480c34c25f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_POWER_ALL/safe051.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe051_POWER_ALL/test.desc new file mode 100644 index 00000000000..125ceeeb21c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe051.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_POWER_OPC/safe051.c b/regression/goto-instrument-wmm-core/ppc_safe051_POWER_OPC/safe051.c new file mode 100644 index 00000000000..9480c34c25f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_POWER_OPC/safe051.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe051_POWER_OPC/test.desc new file mode 100644 index 00000000000..459432a6b94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe051.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe051_POWER_OPT/test.desc index 18a2936d848..3cc14a34429 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe051_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe051_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe051.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_PSO_ALL/safe051.c b/regression/goto-instrument-wmm-core/ppc_safe051_PSO_ALL/safe051.c new file mode 100644 index 00000000000..9480c34c25f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_PSO_ALL/safe051.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe051_PSO_ALL/test.desc new file mode 100644 index 00000000000..41284c60ce1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe051.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_PSO_OPC/safe051.c b/regression/goto-instrument-wmm-core/ppc_safe051_PSO_OPC/safe051.c new file mode 100644 index 00000000000..9480c34c25f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_PSO_OPC/safe051.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe051_PSO_OPC/test.desc new file mode 100644 index 00000000000..c309e7c76ad --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe051.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_PSO_OPT/safe051.c b/regression/goto-instrument-wmm-core/ppc_safe051_PSO_OPT/safe051.c new file mode 100644 index 00000000000..9480c34c25f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_PSO_OPT/safe051.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe051_PSO_OPT/test.desc new file mode 100644 index 00000000000..3c462152cfd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe051.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_RMO_ALL/safe051.c b/regression/goto-instrument-wmm-core/ppc_safe051_RMO_ALL/safe051.c new file mode 100644 index 00000000000..9480c34c25f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_RMO_ALL/safe051.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe051_RMO_ALL/test.desc new file mode 100644 index 00000000000..ed2e812d467 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe051.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_RMO_OPC/safe051.c b/regression/goto-instrument-wmm-core/ppc_safe051_RMO_OPC/safe051.c new file mode 100644 index 00000000000..9480c34c25f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_RMO_OPC/safe051.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe051_RMO_OPC/test.desc new file mode 100644 index 00000000000..76a5e01df39 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe051.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_RMO_OPT/safe051.c b/regression/goto-instrument-wmm-core/ppc_safe051_RMO_OPT/safe051.c new file mode 100644 index 00000000000..9480c34c25f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_RMO_OPT/safe051.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe051_RMO_OPT/test.desc new file mode 100644 index 00000000000..1e38af35896 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe051.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_SC_SAFE/safe051.c b/regression/goto-instrument-wmm-core/ppc_safe051_SC_SAFE/safe051.c new file mode 100644 index 00000000000..9480c34c25f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_SC_SAFE/safe051.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe051_SC_SAFE/test.desc new file mode 100644 index 00000000000..a6e1c4760a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe051.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_TSO_ALL/safe051.c b/regression/goto-instrument-wmm-core/ppc_safe051_TSO_ALL/safe051.c new file mode 100644 index 00000000000..9480c34c25f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_TSO_ALL/safe051.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe051_TSO_ALL/test.desc new file mode 100644 index 00000000000..e7dd768de37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe051.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_TSO_OPC/safe051.c b/regression/goto-instrument-wmm-core/ppc_safe051_TSO_OPC/safe051.c new file mode 100644 index 00000000000..9480c34c25f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_TSO_OPC/safe051.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe051_TSO_OPC/test.desc new file mode 100644 index 00000000000..3523ea07635 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe051.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_TSO_OPT/safe051.c b/regression/goto-instrument-wmm-core/ppc_safe051_TSO_OPT/safe051.c new file mode 100644 index 00000000000..9480c34c25f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_TSO_OPT/safe051.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe051_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe051_TSO_OPT/test.desc new file mode 100644 index 00000000000..aef1d184d3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe051_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe051.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_CAV11_SAFE/safe052.c b/regression/goto-instrument-wmm-core/ppc_safe052_CAV11_SAFE/safe052.c new file mode 100644 index 00000000000..ec69261e6cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_CAV11_SAFE/safe052.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe052_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..facca58995e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe052.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_POWER_ALL/safe052.c b/regression/goto-instrument-wmm-core/ppc_safe052_POWER_ALL/safe052.c new file mode 100644 index 00000000000..ec69261e6cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_POWER_ALL/safe052.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe052_POWER_ALL/test.desc new file mode 100644 index 00000000000..005bd413f19 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe052.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_POWER_OPC/safe052.c b/regression/goto-instrument-wmm-core/ppc_safe052_POWER_OPC/safe052.c new file mode 100644 index 00000000000..ec69261e6cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_POWER_OPC/safe052.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe052_POWER_OPC/test.desc new file mode 100644 index 00000000000..36afd1fd7a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe052.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_POWER_OPT/safe052.c b/regression/goto-instrument-wmm-core/ppc_safe052_POWER_OPT/safe052.c new file mode 100644 index 00000000000..ec69261e6cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_POWER_OPT/safe052.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe052_POWER_OPT/test.desc new file mode 100644 index 00000000000..6d32683a488 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe052.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_PSO_ALL/safe052.c b/regression/goto-instrument-wmm-core/ppc_safe052_PSO_ALL/safe052.c new file mode 100644 index 00000000000..ec69261e6cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_PSO_ALL/safe052.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe052_PSO_ALL/test.desc new file mode 100644 index 00000000000..bfe0e839f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe052.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_PSO_OPC/safe052.c b/regression/goto-instrument-wmm-core/ppc_safe052_PSO_OPC/safe052.c new file mode 100644 index 00000000000..ec69261e6cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_PSO_OPC/safe052.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe052_PSO_OPC/test.desc new file mode 100644 index 00000000000..1398d1b0db5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe052.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_PSO_OPT/safe052.c b/regression/goto-instrument-wmm-core/ppc_safe052_PSO_OPT/safe052.c new file mode 100644 index 00000000000..ec69261e6cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_PSO_OPT/safe052.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe052_PSO_OPT/test.desc new file mode 100644 index 00000000000..234b1c2ca76 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe052.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_RMO_ALL/safe052.c b/regression/goto-instrument-wmm-core/ppc_safe052_RMO_ALL/safe052.c new file mode 100644 index 00000000000..ec69261e6cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_RMO_ALL/safe052.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe052_RMO_ALL/test.desc new file mode 100644 index 00000000000..bb324c09f8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe052.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_RMO_OPC/safe052.c b/regression/goto-instrument-wmm-core/ppc_safe052_RMO_OPC/safe052.c new file mode 100644 index 00000000000..ec69261e6cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_RMO_OPC/safe052.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe052_RMO_OPC/test.desc new file mode 100644 index 00000000000..b457db2c63e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe052.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_RMO_OPT/safe052.c b/regression/goto-instrument-wmm-core/ppc_safe052_RMO_OPT/safe052.c new file mode 100644 index 00000000000..ec69261e6cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_RMO_OPT/safe052.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe052_RMO_OPT/test.desc new file mode 100644 index 00000000000..441e8826000 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe052.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_SC_SAFE/safe052.c b/regression/goto-instrument-wmm-core/ppc_safe052_SC_SAFE/safe052.c new file mode 100644 index 00000000000..ec69261e6cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_SC_SAFE/safe052.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe052_SC_SAFE/test.desc new file mode 100644 index 00000000000..2091d8a413c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe052.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_TSO_ALL/safe052.c b/regression/goto-instrument-wmm-core/ppc_safe052_TSO_ALL/safe052.c new file mode 100644 index 00000000000..ec69261e6cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_TSO_ALL/safe052.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe052_TSO_ALL/test.desc new file mode 100644 index 00000000000..d4d4d567233 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe052.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_TSO_OPC/safe052.c b/regression/goto-instrument-wmm-core/ppc_safe052_TSO_OPC/safe052.c new file mode 100644 index 00000000000..ec69261e6cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_TSO_OPC/safe052.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe052_TSO_OPC/test.desc new file mode 100644 index 00000000000..766d425cc37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe052.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_TSO_OPT/safe052.c b/regression/goto-instrument-wmm-core/ppc_safe052_TSO_OPT/safe052.c new file mode 100644 index 00000000000..ec69261e6cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_TSO_OPT/safe052.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe052_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe052_TSO_OPT/test.desc new file mode 100644 index 00000000000..85e29d2aec5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe052_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe052.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_CAV11_ERROR/safe053.c b/regression/goto-instrument-wmm-core/ppc_safe053_CAV11_ERROR/safe053.c new file mode 100644 index 00000000000..3d05aeb4bf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_CAV11_ERROR/safe053.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe053_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..fa4496d31cc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe053.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_POWER_ALL/safe053.c b/regression/goto-instrument-wmm-core/ppc_safe053_POWER_ALL/safe053.c new file mode 100644 index 00000000000..3d05aeb4bf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_POWER_ALL/safe053.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe053_POWER_ALL/test.desc new file mode 100644 index 00000000000..654c40c36ee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe053.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_POWER_OPC/safe053.c b/regression/goto-instrument-wmm-core/ppc_safe053_POWER_OPC/safe053.c new file mode 100644 index 00000000000..3d05aeb4bf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_POWER_OPC/safe053.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe053_POWER_OPC/test.desc new file mode 100644 index 00000000000..b7edaef7994 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe053.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_POWER_OPT/safe053.c b/regression/goto-instrument-wmm-core/ppc_safe053_POWER_OPT/safe053.c new file mode 100644 index 00000000000..3d05aeb4bf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_POWER_OPT/safe053.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe053_POWER_OPT/test.desc new file mode 100644 index 00000000000..04ea41e4a6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe053.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_PSO_ALL/safe053.c b/regression/goto-instrument-wmm-core/ppc_safe053_PSO_ALL/safe053.c new file mode 100644 index 00000000000..3d05aeb4bf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_PSO_ALL/safe053.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe053_PSO_ALL/test.desc new file mode 100644 index 00000000000..ba2939f79b1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe053.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_PSO_OPC/safe053.c b/regression/goto-instrument-wmm-core/ppc_safe053_PSO_OPC/safe053.c new file mode 100644 index 00000000000..3d05aeb4bf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_PSO_OPC/safe053.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe053_PSO_OPC/test.desc new file mode 100644 index 00000000000..4fe6b0e18a0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe053.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_PSO_OPT/safe053.c b/regression/goto-instrument-wmm-core/ppc_safe053_PSO_OPT/safe053.c new file mode 100644 index 00000000000..3d05aeb4bf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_PSO_OPT/safe053.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe053_PSO_OPT/test.desc new file mode 100644 index 00000000000..7f4ee43fcf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe053.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_RMO_ALL/safe053.c b/regression/goto-instrument-wmm-core/ppc_safe053_RMO_ALL/safe053.c new file mode 100644 index 00000000000..3d05aeb4bf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_RMO_ALL/safe053.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe053_RMO_ALL/test.desc new file mode 100644 index 00000000000..ea5e6d6d099 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe053.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_RMO_OPC/safe053.c b/regression/goto-instrument-wmm-core/ppc_safe053_RMO_OPC/safe053.c new file mode 100644 index 00000000000..3d05aeb4bf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_RMO_OPC/safe053.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe053_RMO_OPC/test.desc new file mode 100644 index 00000000000..485ad979617 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe053.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_RMO_OPT/safe053.c b/regression/goto-instrument-wmm-core/ppc_safe053_RMO_OPT/safe053.c new file mode 100644 index 00000000000..3d05aeb4bf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_RMO_OPT/safe053.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe053_RMO_OPT/test.desc new file mode 100644 index 00000000000..a230f1a13a2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe053.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_SC_SAFE/safe053.c b/regression/goto-instrument-wmm-core/ppc_safe053_SC_SAFE/safe053.c new file mode 100644 index 00000000000..3d05aeb4bf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_SC_SAFE/safe053.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe053_SC_SAFE/test.desc new file mode 100644 index 00000000000..26017e84b0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe053.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_TSO_ALL/safe053.c b/regression/goto-instrument-wmm-core/ppc_safe053_TSO_ALL/safe053.c new file mode 100644 index 00000000000..3d05aeb4bf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_TSO_ALL/safe053.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe053_TSO_ALL/test.desc new file mode 100644 index 00000000000..5215be90c89 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe053.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_TSO_OPC/safe053.c b/regression/goto-instrument-wmm-core/ppc_safe053_TSO_OPC/safe053.c new file mode 100644 index 00000000000..3d05aeb4bf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_TSO_OPC/safe053.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe053_TSO_OPC/test.desc new file mode 100644 index 00000000000..b7bf9673210 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe053.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_TSO_OPT/safe053.c b/regression/goto-instrument-wmm-core/ppc_safe053_TSO_OPT/safe053.c new file mode 100644 index 00000000000..3d05aeb4bf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_TSO_OPT/safe053.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe053_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe053_TSO_OPT/test.desc new file mode 100644 index 00000000000..5ed59b979c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe053_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe053.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_CAV11_ERROR/safe054.c b/regression/goto-instrument-wmm-core/ppc_safe054_CAV11_ERROR/safe054.c new file mode 100644 index 00000000000..9ee131390e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_CAV11_ERROR/safe054.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe054_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..aa067d83a9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe054.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_POWER_ALL/safe054.c b/regression/goto-instrument-wmm-core/ppc_safe054_POWER_ALL/safe054.c new file mode 100644 index 00000000000..9ee131390e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_POWER_ALL/safe054.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe054_POWER_ALL/test.desc new file mode 100644 index 00000000000..e7b9731ed33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe054.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_POWER_OPC/safe054.c b/regression/goto-instrument-wmm-core/ppc_safe054_POWER_OPC/safe054.c new file mode 100644 index 00000000000..9ee131390e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_POWER_OPC/safe054.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe054_POWER_OPC/test.desc new file mode 100644 index 00000000000..2fb7c4207cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe054.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_POWER_OPT/safe054.c b/regression/goto-instrument-wmm-core/ppc_safe054_POWER_OPT/safe054.c new file mode 100644 index 00000000000..9ee131390e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_POWER_OPT/safe054.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe054_POWER_OPT/test.desc new file mode 100644 index 00000000000..5d1e9431208 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe054.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_PSO_ALL/safe054.c b/regression/goto-instrument-wmm-core/ppc_safe054_PSO_ALL/safe054.c new file mode 100644 index 00000000000..9ee131390e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_PSO_ALL/safe054.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe054_PSO_ALL/test.desc new file mode 100644 index 00000000000..e4b01f75af9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe054.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_PSO_OPC/safe054.c b/regression/goto-instrument-wmm-core/ppc_safe054_PSO_OPC/safe054.c new file mode 100644 index 00000000000..9ee131390e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_PSO_OPC/safe054.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe054_PSO_OPC/test.desc new file mode 100644 index 00000000000..2b67d0217c5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe054.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_PSO_OPT/safe054.c b/regression/goto-instrument-wmm-core/ppc_safe054_PSO_OPT/safe054.c new file mode 100644 index 00000000000..9ee131390e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_PSO_OPT/safe054.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe054_PSO_OPT/test.desc new file mode 100644 index 00000000000..80a0d4d5a8d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe054.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_RMO_ALL/safe054.c b/regression/goto-instrument-wmm-core/ppc_safe054_RMO_ALL/safe054.c new file mode 100644 index 00000000000..9ee131390e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_RMO_ALL/safe054.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe054_RMO_ALL/test.desc new file mode 100644 index 00000000000..34392536f60 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe054.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_RMO_OPC/safe054.c b/regression/goto-instrument-wmm-core/ppc_safe054_RMO_OPC/safe054.c new file mode 100644 index 00000000000..9ee131390e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_RMO_OPC/safe054.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe054_RMO_OPC/test.desc new file mode 100644 index 00000000000..6d22b20b751 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe054.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_RMO_OPT/safe054.c b/regression/goto-instrument-wmm-core/ppc_safe054_RMO_OPT/safe054.c new file mode 100644 index 00000000000..9ee131390e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_RMO_OPT/safe054.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe054_RMO_OPT/test.desc new file mode 100644 index 00000000000..db8f506a27c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe054.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_SC_SAFE/safe054.c b/regression/goto-instrument-wmm-core/ppc_safe054_SC_SAFE/safe054.c new file mode 100644 index 00000000000..9ee131390e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_SC_SAFE/safe054.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe054_SC_SAFE/test.desc new file mode 100644 index 00000000000..af8db2bbaaf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe054.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_TSO_ALL/safe054.c b/regression/goto-instrument-wmm-core/ppc_safe054_TSO_ALL/safe054.c new file mode 100644 index 00000000000..9ee131390e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_TSO_ALL/safe054.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe054_TSO_ALL/test.desc new file mode 100644 index 00000000000..3bbeee8b947 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe054.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_TSO_OPC/safe054.c b/regression/goto-instrument-wmm-core/ppc_safe054_TSO_OPC/safe054.c new file mode 100644 index 00000000000..9ee131390e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_TSO_OPC/safe054.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe054_TSO_OPC/test.desc new file mode 100644 index 00000000000..dae915d49c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe054.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_TSO_OPT/safe054.c b/regression/goto-instrument-wmm-core/ppc_safe054_TSO_OPT/safe054.c new file mode 100644 index 00000000000..9ee131390e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_TSO_OPT/safe054.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe054_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe054_TSO_OPT/test.desc new file mode 100644 index 00000000000..284083a8ee0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe054_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe054.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_CAV11_ERROR/safe055.c b/regression/goto-instrument-wmm-core/ppc_safe055_CAV11_ERROR/safe055.c new file mode 100644 index 00000000000..ff0e3a0e18e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_CAV11_ERROR/safe055.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe055_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..3aa178dbc8f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe055.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_POWER_ALL/safe055.c b/regression/goto-instrument-wmm-core/ppc_safe055_POWER_ALL/safe055.c new file mode 100644 index 00000000000..ff0e3a0e18e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_POWER_ALL/safe055.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe055_POWER_ALL/test.desc new file mode 100644 index 00000000000..b27272abbcf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe055.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_POWER_OPC/safe055.c b/regression/goto-instrument-wmm-core/ppc_safe055_POWER_OPC/safe055.c new file mode 100644 index 00000000000..ff0e3a0e18e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_POWER_OPC/safe055.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe055_POWER_OPC/test.desc new file mode 100644 index 00000000000..1c06e2290b5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe055.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_POWER_OPT/safe055.c b/regression/goto-instrument-wmm-core/ppc_safe055_POWER_OPT/safe055.c new file mode 100644 index 00000000000..ff0e3a0e18e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_POWER_OPT/safe055.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe055_POWER_OPT/test.desc new file mode 100644 index 00000000000..3e275d7935a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe055.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_PSO_ALL/safe055.c b/regression/goto-instrument-wmm-core/ppc_safe055_PSO_ALL/safe055.c new file mode 100644 index 00000000000..ff0e3a0e18e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_PSO_ALL/safe055.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe055_PSO_ALL/test.desc new file mode 100644 index 00000000000..f64efb7d588 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe055.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_PSO_OPC/safe055.c b/regression/goto-instrument-wmm-core/ppc_safe055_PSO_OPC/safe055.c new file mode 100644 index 00000000000..ff0e3a0e18e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_PSO_OPC/safe055.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe055_PSO_OPC/test.desc new file mode 100644 index 00000000000..cb230c25910 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe055.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_PSO_OPT/safe055.c b/regression/goto-instrument-wmm-core/ppc_safe055_PSO_OPT/safe055.c new file mode 100644 index 00000000000..ff0e3a0e18e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_PSO_OPT/safe055.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe055_PSO_OPT/test.desc new file mode 100644 index 00000000000..a277390e2eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe055.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_RMO_ALL/safe055.c b/regression/goto-instrument-wmm-core/ppc_safe055_RMO_ALL/safe055.c new file mode 100644 index 00000000000..ff0e3a0e18e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_RMO_ALL/safe055.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe055_RMO_ALL/test.desc new file mode 100644 index 00000000000..a0b95cbb486 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe055.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_RMO_OPC/safe055.c b/regression/goto-instrument-wmm-core/ppc_safe055_RMO_OPC/safe055.c new file mode 100644 index 00000000000..ff0e3a0e18e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_RMO_OPC/safe055.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe055_RMO_OPC/test.desc new file mode 100644 index 00000000000..2f51cd54423 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe055.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_RMO_OPT/safe055.c b/regression/goto-instrument-wmm-core/ppc_safe055_RMO_OPT/safe055.c new file mode 100644 index 00000000000..ff0e3a0e18e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_RMO_OPT/safe055.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe055_RMO_OPT/test.desc new file mode 100644 index 00000000000..b5dfb078dc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe055.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_SC_SAFE/safe055.c b/regression/goto-instrument-wmm-core/ppc_safe055_SC_SAFE/safe055.c new file mode 100644 index 00000000000..ff0e3a0e18e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_SC_SAFE/safe055.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe055_SC_SAFE/test.desc new file mode 100644 index 00000000000..9492127db16 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe055.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_TSO_ALL/safe055.c b/regression/goto-instrument-wmm-core/ppc_safe055_TSO_ALL/safe055.c new file mode 100644 index 00000000000..ff0e3a0e18e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_TSO_ALL/safe055.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe055_TSO_ALL/test.desc new file mode 100644 index 00000000000..489d0a92a50 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe055.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_TSO_OPC/safe055.c b/regression/goto-instrument-wmm-core/ppc_safe055_TSO_OPC/safe055.c new file mode 100644 index 00000000000..ff0e3a0e18e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_TSO_OPC/safe055.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe055_TSO_OPC/test.desc new file mode 100644 index 00000000000..6f17440a97a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe055.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_TSO_OPT/safe055.c b/regression/goto-instrument-wmm-core/ppc_safe055_TSO_OPT/safe055.c new file mode 100644 index 00000000000..ff0e3a0e18e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_TSO_OPT/safe055.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe055_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe055_TSO_OPT/test.desc new file mode 100644 index 00000000000..57f93808be9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe055_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe055.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_CAV11_ERROR/safe056.c b/regression/goto-instrument-wmm-core/ppc_safe056_CAV11_ERROR/safe056.c new file mode 100644 index 00000000000..515e9fc3664 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_CAV11_ERROR/safe056.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe056_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..b378836a818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe056.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_POWER_ALL/safe056.c b/regression/goto-instrument-wmm-core/ppc_safe056_POWER_ALL/safe056.c new file mode 100644 index 00000000000..515e9fc3664 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_POWER_ALL/safe056.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe056_POWER_ALL/test.desc new file mode 100644 index 00000000000..51b9a2c5f88 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe056.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_POWER_OPC/safe056.c b/regression/goto-instrument-wmm-core/ppc_safe056_POWER_OPC/safe056.c new file mode 100644 index 00000000000..515e9fc3664 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_POWER_OPC/safe056.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe056_POWER_OPC/test.desc new file mode 100644 index 00000000000..fb4c12bf1f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe056.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_POWER_OPT/safe056.c b/regression/goto-instrument-wmm-core/ppc_safe056_POWER_OPT/safe056.c new file mode 100644 index 00000000000..515e9fc3664 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_POWER_OPT/safe056.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe056_POWER_OPT/test.desc new file mode 100644 index 00000000000..2ddade81351 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe056.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_PSO_ALL/safe056.c b/regression/goto-instrument-wmm-core/ppc_safe056_PSO_ALL/safe056.c new file mode 100644 index 00000000000..515e9fc3664 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_PSO_ALL/safe056.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe056_PSO_ALL/test.desc new file mode 100644 index 00000000000..6adab39d4fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe056.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_PSO_OPC/safe056.c b/regression/goto-instrument-wmm-core/ppc_safe056_PSO_OPC/safe056.c new file mode 100644 index 00000000000..515e9fc3664 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_PSO_OPC/safe056.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe056_PSO_OPC/test.desc new file mode 100644 index 00000000000..f8c84aacdc8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe056.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_PSO_OPT/safe056.c b/regression/goto-instrument-wmm-core/ppc_safe056_PSO_OPT/safe056.c new file mode 100644 index 00000000000..515e9fc3664 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_PSO_OPT/safe056.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe056_PSO_OPT/test.desc new file mode 100644 index 00000000000..f087b9f804f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe056.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_RMO_ALL/safe056.c b/regression/goto-instrument-wmm-core/ppc_safe056_RMO_ALL/safe056.c new file mode 100644 index 00000000000..515e9fc3664 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_RMO_ALL/safe056.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe056_RMO_ALL/test.desc new file mode 100644 index 00000000000..c832ab05805 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe056.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_RMO_OPC/safe056.c b/regression/goto-instrument-wmm-core/ppc_safe056_RMO_OPC/safe056.c new file mode 100644 index 00000000000..515e9fc3664 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_RMO_OPC/safe056.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe056_RMO_OPC/test.desc new file mode 100644 index 00000000000..66d84a3bd9a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe056.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_RMO_OPT/safe056.c b/regression/goto-instrument-wmm-core/ppc_safe056_RMO_OPT/safe056.c new file mode 100644 index 00000000000..515e9fc3664 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_RMO_OPT/safe056.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe056_RMO_OPT/test.desc new file mode 100644 index 00000000000..71bb4fc5e53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe056.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_SC_SAFE/safe056.c b/regression/goto-instrument-wmm-core/ppc_safe056_SC_SAFE/safe056.c new file mode 100644 index 00000000000..515e9fc3664 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_SC_SAFE/safe056.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe056_SC_SAFE/test.desc new file mode 100644 index 00000000000..c536f487bc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe056.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_TSO_ALL/safe056.c b/regression/goto-instrument-wmm-core/ppc_safe056_TSO_ALL/safe056.c new file mode 100644 index 00000000000..515e9fc3664 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_TSO_ALL/safe056.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe056_TSO_ALL/test.desc new file mode 100644 index 00000000000..346327b8e13 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe056.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_TSO_OPC/safe056.c b/regression/goto-instrument-wmm-core/ppc_safe056_TSO_OPC/safe056.c new file mode 100644 index 00000000000..515e9fc3664 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_TSO_OPC/safe056.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe056_TSO_OPC/test.desc new file mode 100644 index 00000000000..fad74fc8338 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe056.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_TSO_OPT/safe056.c b/regression/goto-instrument-wmm-core/ppc_safe056_TSO_OPT/safe056.c new file mode 100644 index 00000000000..515e9fc3664 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_TSO_OPT/safe056.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe056_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe056_TSO_OPT/test.desc new file mode 100644 index 00000000000..3024fe113d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe056_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe056.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_CAV11_ERROR/safe057.c b/regression/goto-instrument-wmm-core/ppc_safe057_CAV11_ERROR/safe057.c new file mode 100644 index 00000000000..683f9e31254 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_CAV11_ERROR/safe057.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe057_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..d3035287f4a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe057.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_POWER_ALL/safe057.c b/regression/goto-instrument-wmm-core/ppc_safe057_POWER_ALL/safe057.c new file mode 100644 index 00000000000..683f9e31254 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_POWER_ALL/safe057.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe057_POWER_ALL/test.desc new file mode 100644 index 00000000000..3c463f93534 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe057.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_POWER_OPC/safe057.c b/regression/goto-instrument-wmm-core/ppc_safe057_POWER_OPC/safe057.c new file mode 100644 index 00000000000..683f9e31254 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_POWER_OPC/safe057.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe057_POWER_OPC/test.desc new file mode 100644 index 00000000000..2e66ed027fb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe057.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe057_POWER_OPT/test.desc index 60164d4c51d..2bdf6ec5aa4 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe057_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe057_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe057.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_PSO_ALL/safe057.c b/regression/goto-instrument-wmm-core/ppc_safe057_PSO_ALL/safe057.c new file mode 100644 index 00000000000..683f9e31254 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_PSO_ALL/safe057.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe057_PSO_ALL/test.desc new file mode 100644 index 00000000000..8358c490a04 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe057.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_PSO_OPC/safe057.c b/regression/goto-instrument-wmm-core/ppc_safe057_PSO_OPC/safe057.c new file mode 100644 index 00000000000..683f9e31254 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_PSO_OPC/safe057.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe057_PSO_OPC/test.desc new file mode 100644 index 00000000000..f823c4c641d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe057.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_PSO_OPT/safe057.c b/regression/goto-instrument-wmm-core/ppc_safe057_PSO_OPT/safe057.c new file mode 100644 index 00000000000..683f9e31254 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_PSO_OPT/safe057.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe057_PSO_OPT/test.desc new file mode 100644 index 00000000000..5f10e4fd6a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe057.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_RMO_ALL/safe057.c b/regression/goto-instrument-wmm-core/ppc_safe057_RMO_ALL/safe057.c new file mode 100644 index 00000000000..683f9e31254 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_RMO_ALL/safe057.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe057_RMO_ALL/test.desc new file mode 100644 index 00000000000..2ccbc45e0d3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe057.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_RMO_OPC/safe057.c b/regression/goto-instrument-wmm-core/ppc_safe057_RMO_OPC/safe057.c new file mode 100644 index 00000000000..683f9e31254 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_RMO_OPC/safe057.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe057_RMO_OPC/test.desc new file mode 100644 index 00000000000..b1ff0daf964 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe057.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_RMO_OPT/safe057.c b/regression/goto-instrument-wmm-core/ppc_safe057_RMO_OPT/safe057.c new file mode 100644 index 00000000000..683f9e31254 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_RMO_OPT/safe057.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe057_RMO_OPT/test.desc new file mode 100644 index 00000000000..9c00de52c62 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe057.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_SC_SAFE/safe057.c b/regression/goto-instrument-wmm-core/ppc_safe057_SC_SAFE/safe057.c new file mode 100644 index 00000000000..683f9e31254 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_SC_SAFE/safe057.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe057_SC_SAFE/test.desc new file mode 100644 index 00000000000..d400e7686e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe057.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_TSO_ALL/safe057.c b/regression/goto-instrument-wmm-core/ppc_safe057_TSO_ALL/safe057.c new file mode 100644 index 00000000000..683f9e31254 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_TSO_ALL/safe057.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe057_TSO_ALL/test.desc new file mode 100644 index 00000000000..73ac6b34557 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe057.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_TSO_OPC/safe057.c b/regression/goto-instrument-wmm-core/ppc_safe057_TSO_OPC/safe057.c new file mode 100644 index 00000000000..683f9e31254 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_TSO_OPC/safe057.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe057_TSO_OPC/test.desc new file mode 100644 index 00000000000..2d4f598b9eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe057.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_TSO_OPT/safe057.c b/regression/goto-instrument-wmm-core/ppc_safe057_TSO_OPT/safe057.c new file mode 100644 index 00000000000..683f9e31254 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_TSO_OPT/safe057.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe057_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe057_TSO_OPT/test.desc new file mode 100644 index 00000000000..099e3adb91c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe057_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe057.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_CAV11_ERROR/safe058.c b/regression/goto-instrument-wmm-core/ppc_safe058_CAV11_ERROR/safe058.c new file mode 100644 index 00000000000..ecd5bd320ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_CAV11_ERROR/safe058.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe058_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..0b540678bb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe058.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_POWER_ALL/safe058.c b/regression/goto-instrument-wmm-core/ppc_safe058_POWER_ALL/safe058.c new file mode 100644 index 00000000000..ecd5bd320ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_POWER_ALL/safe058.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe058_POWER_ALL/test.desc new file mode 100644 index 00000000000..28d86a18e9d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe058.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_POWER_OPC/safe058.c b/regression/goto-instrument-wmm-core/ppc_safe058_POWER_OPC/safe058.c new file mode 100644 index 00000000000..ecd5bd320ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_POWER_OPC/safe058.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe058_POWER_OPC/test.desc new file mode 100644 index 00000000000..9b0e93f757e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe058.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_POWER_OPT/safe058.c b/regression/goto-instrument-wmm-core/ppc_safe058_POWER_OPT/safe058.c new file mode 100644 index 00000000000..ecd5bd320ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_POWER_OPT/safe058.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe058_POWER_OPT/test.desc new file mode 100644 index 00000000000..5ba9353eeba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe058.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_PSO_ALL/safe058.c b/regression/goto-instrument-wmm-core/ppc_safe058_PSO_ALL/safe058.c new file mode 100644 index 00000000000..ecd5bd320ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_PSO_ALL/safe058.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe058_PSO_ALL/test.desc new file mode 100644 index 00000000000..fa6abeebff1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe058.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_PSO_OPC/safe058.c b/regression/goto-instrument-wmm-core/ppc_safe058_PSO_OPC/safe058.c new file mode 100644 index 00000000000..ecd5bd320ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_PSO_OPC/safe058.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe058_PSO_OPC/test.desc new file mode 100644 index 00000000000..75eda76a6da --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe058.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_PSO_OPT/safe058.c b/regression/goto-instrument-wmm-core/ppc_safe058_PSO_OPT/safe058.c new file mode 100644 index 00000000000..ecd5bd320ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_PSO_OPT/safe058.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe058_PSO_OPT/test.desc new file mode 100644 index 00000000000..4b8a93f6ec1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe058.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_RMO_ALL/safe058.c b/regression/goto-instrument-wmm-core/ppc_safe058_RMO_ALL/safe058.c new file mode 100644 index 00000000000..ecd5bd320ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_RMO_ALL/safe058.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe058_RMO_ALL/test.desc new file mode 100644 index 00000000000..62dc36415c5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe058.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_RMO_OPC/safe058.c b/regression/goto-instrument-wmm-core/ppc_safe058_RMO_OPC/safe058.c new file mode 100644 index 00000000000..ecd5bd320ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_RMO_OPC/safe058.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe058_RMO_OPC/test.desc new file mode 100644 index 00000000000..6a7de660a51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe058.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_RMO_OPT/safe058.c b/regression/goto-instrument-wmm-core/ppc_safe058_RMO_OPT/safe058.c new file mode 100644 index 00000000000..ecd5bd320ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_RMO_OPT/safe058.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe058_RMO_OPT/test.desc new file mode 100644 index 00000000000..b9b3b95289e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe058.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_SC_SAFE/safe058.c b/regression/goto-instrument-wmm-core/ppc_safe058_SC_SAFE/safe058.c new file mode 100644 index 00000000000..ecd5bd320ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_SC_SAFE/safe058.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe058_SC_SAFE/test.desc new file mode 100644 index 00000000000..70117830f62 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe058.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_TSO_ALL/safe058.c b/regression/goto-instrument-wmm-core/ppc_safe058_TSO_ALL/safe058.c new file mode 100644 index 00000000000..ecd5bd320ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_TSO_ALL/safe058.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe058_TSO_ALL/test.desc new file mode 100644 index 00000000000..889d72e875e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe058.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_TSO_OPC/safe058.c b/regression/goto-instrument-wmm-core/ppc_safe058_TSO_OPC/safe058.c new file mode 100644 index 00000000000..ecd5bd320ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_TSO_OPC/safe058.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe058_TSO_OPC/test.desc new file mode 100644 index 00000000000..7e565db7d66 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe058.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_TSO_OPT/safe058.c b/regression/goto-instrument-wmm-core/ppc_safe058_TSO_OPT/safe058.c new file mode 100644 index 00000000000..ecd5bd320ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_TSO_OPT/safe058.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe058_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe058_TSO_OPT/test.desc new file mode 100644 index 00000000000..656292d37e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe058_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe058.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_CAV11_ERROR/safe059.c b/regression/goto-instrument-wmm-core/ppc_safe059_CAV11_ERROR/safe059.c new file mode 100644 index 00000000000..d641922004a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_CAV11_ERROR/safe059.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe059_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..f5f283cbdfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe059.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_POWER_ALL/safe059.c b/regression/goto-instrument-wmm-core/ppc_safe059_POWER_ALL/safe059.c new file mode 100644 index 00000000000..d641922004a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_POWER_ALL/safe059.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe059_POWER_ALL/test.desc new file mode 100644 index 00000000000..2d40809d4dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe059.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_POWER_OPC/safe059.c b/regression/goto-instrument-wmm-core/ppc_safe059_POWER_OPC/safe059.c new file mode 100644 index 00000000000..d641922004a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_POWER_OPC/safe059.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe059_POWER_OPC/test.desc new file mode 100644 index 00000000000..3db3932d7cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe059.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_POWER_OPT/safe059.c b/regression/goto-instrument-wmm-core/ppc_safe059_POWER_OPT/safe059.c new file mode 100644 index 00000000000..d641922004a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_POWER_OPT/safe059.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe059_POWER_OPT/test.desc new file mode 100644 index 00000000000..95874e790db --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe059.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_PSO_ALL/safe059.c b/regression/goto-instrument-wmm-core/ppc_safe059_PSO_ALL/safe059.c new file mode 100644 index 00000000000..d641922004a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_PSO_ALL/safe059.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe059_PSO_ALL/test.desc new file mode 100644 index 00000000000..4bd5928664c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe059.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_PSO_OPC/safe059.c b/regression/goto-instrument-wmm-core/ppc_safe059_PSO_OPC/safe059.c new file mode 100644 index 00000000000..d641922004a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_PSO_OPC/safe059.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe059_PSO_OPC/test.desc new file mode 100644 index 00000000000..62a7fca8ef1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe059.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_PSO_OPT/safe059.c b/regression/goto-instrument-wmm-core/ppc_safe059_PSO_OPT/safe059.c new file mode 100644 index 00000000000..d641922004a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_PSO_OPT/safe059.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe059_PSO_OPT/test.desc new file mode 100644 index 00000000000..f0fc0da13c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe059.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_RMO_ALL/safe059.c b/regression/goto-instrument-wmm-core/ppc_safe059_RMO_ALL/safe059.c new file mode 100644 index 00000000000..d641922004a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_RMO_ALL/safe059.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe059_RMO_ALL/test.desc new file mode 100644 index 00000000000..384f6ca70cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe059.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_RMO_OPC/safe059.c b/regression/goto-instrument-wmm-core/ppc_safe059_RMO_OPC/safe059.c new file mode 100644 index 00000000000..d641922004a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_RMO_OPC/safe059.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe059_RMO_OPC/test.desc new file mode 100644 index 00000000000..1c98a9a7833 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe059.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_RMO_OPT/safe059.c b/regression/goto-instrument-wmm-core/ppc_safe059_RMO_OPT/safe059.c new file mode 100644 index 00000000000..d641922004a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_RMO_OPT/safe059.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe059_RMO_OPT/test.desc new file mode 100644 index 00000000000..ac9fdc1dd89 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe059.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_SC_SAFE/safe059.c b/regression/goto-instrument-wmm-core/ppc_safe059_SC_SAFE/safe059.c new file mode 100644 index 00000000000..d641922004a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_SC_SAFE/safe059.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe059_SC_SAFE/test.desc new file mode 100644 index 00000000000..8cf5b2eb650 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe059.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_TSO_ALL/safe059.c b/regression/goto-instrument-wmm-core/ppc_safe059_TSO_ALL/safe059.c new file mode 100644 index 00000000000..d641922004a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_TSO_ALL/safe059.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe059_TSO_ALL/test.desc new file mode 100644 index 00000000000..0e208e3cc44 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe059.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_TSO_OPC/safe059.c b/regression/goto-instrument-wmm-core/ppc_safe059_TSO_OPC/safe059.c new file mode 100644 index 00000000000..d641922004a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_TSO_OPC/safe059.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe059_TSO_OPC/test.desc new file mode 100644 index 00000000000..39508602f00 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe059.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_TSO_OPT/safe059.c b/regression/goto-instrument-wmm-core/ppc_safe059_TSO_OPT/safe059.c new file mode 100644 index 00000000000..d641922004a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_TSO_OPT/safe059.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe059_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe059_TSO_OPT/test.desc new file mode 100644 index 00000000000..1cc9d1dd0bf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe059_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe059.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_CAV11_ERROR/safe060.c b/regression/goto-instrument-wmm-core/ppc_safe060_CAV11_ERROR/safe060.c new file mode 100644 index 00000000000..a1036facb30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_CAV11_ERROR/safe060.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p3_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe060_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..c5df8146b92 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe060.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_POWER_ALL/safe060.c b/regression/goto-instrument-wmm-core/ppc_safe060_POWER_ALL/safe060.c new file mode 100644 index 00000000000..a1036facb30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_POWER_ALL/safe060.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p3_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe060_POWER_ALL/test.desc new file mode 100644 index 00000000000..e283a70c161 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe060.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_POWER_OPC/safe060.c b/regression/goto-instrument-wmm-core/ppc_safe060_POWER_OPC/safe060.c new file mode 100644 index 00000000000..a1036facb30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_POWER_OPC/safe060.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p3_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe060_POWER_OPC/test.desc new file mode 100644 index 00000000000..43bf6fbfd69 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe060.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_POWER_OPT/safe060.c b/regression/goto-instrument-wmm-core/ppc_safe060_POWER_OPT/safe060.c new file mode 100644 index 00000000000..a1036facb30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_POWER_OPT/safe060.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p3_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe060_POWER_OPT/test.desc new file mode 100644 index 00000000000..da6aa484303 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe060.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_PSO_ALL/safe060.c b/regression/goto-instrument-wmm-core/ppc_safe060_PSO_ALL/safe060.c new file mode 100644 index 00000000000..a1036facb30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_PSO_ALL/safe060.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p3_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe060_PSO_ALL/test.desc new file mode 100644 index 00000000000..c29a200ff56 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe060.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_PSO_OPC/safe060.c b/regression/goto-instrument-wmm-core/ppc_safe060_PSO_OPC/safe060.c new file mode 100644 index 00000000000..a1036facb30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_PSO_OPC/safe060.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p3_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe060_PSO_OPC/test.desc new file mode 100644 index 00000000000..6fe3bd51724 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe060.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_PSO_OPT/safe060.c b/regression/goto-instrument-wmm-core/ppc_safe060_PSO_OPT/safe060.c new file mode 100644 index 00000000000..a1036facb30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_PSO_OPT/safe060.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p3_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe060_PSO_OPT/test.desc new file mode 100644 index 00000000000..bce006350c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe060.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_RMO_ALL/safe060.c b/regression/goto-instrument-wmm-core/ppc_safe060_RMO_ALL/safe060.c new file mode 100644 index 00000000000..a1036facb30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_RMO_ALL/safe060.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p3_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe060_RMO_ALL/test.desc new file mode 100644 index 00000000000..fbf4895735d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe060.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_RMO_OPC/safe060.c b/regression/goto-instrument-wmm-core/ppc_safe060_RMO_OPC/safe060.c new file mode 100644 index 00000000000..a1036facb30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_RMO_OPC/safe060.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p3_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe060_RMO_OPC/test.desc new file mode 100644 index 00000000000..b762b5d602f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe060.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_RMO_OPT/safe060.c b/regression/goto-instrument-wmm-core/ppc_safe060_RMO_OPT/safe060.c new file mode 100644 index 00000000000..a1036facb30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_RMO_OPT/safe060.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p3_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe060_RMO_OPT/test.desc new file mode 100644 index 00000000000..df593251aa0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe060.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_SC_SAFE/safe060.c b/regression/goto-instrument-wmm-core/ppc_safe060_SC_SAFE/safe060.c new file mode 100644 index 00000000000..a1036facb30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_SC_SAFE/safe060.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p3_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe060_SC_SAFE/test.desc new file mode 100644 index 00000000000..a1118fa62c1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe060.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_TSO_ALL/safe060.c b/regression/goto-instrument-wmm-core/ppc_safe060_TSO_ALL/safe060.c new file mode 100644 index 00000000000..a1036facb30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_TSO_ALL/safe060.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p3_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe060_TSO_ALL/test.desc new file mode 100644 index 00000000000..69a380519ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe060.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_TSO_OPC/safe060.c b/regression/goto-instrument-wmm-core/ppc_safe060_TSO_OPC/safe060.c new file mode 100644 index 00000000000..a1036facb30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_TSO_OPC/safe060.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p3_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe060_TSO_OPC/test.desc new file mode 100644 index 00000000000..7f9d5291fe8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe060.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_TSO_OPT/safe060.c b/regression/goto-instrument-wmm-core/ppc_safe060_TSO_OPT/safe060.c new file mode 100644 index 00000000000..a1036facb30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_TSO_OPT/safe060.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p3_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe060_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe060_TSO_OPT/test.desc new file mode 100644 index 00000000000..5cc8f74ab51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe060_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe060.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_CAV11_ERROR/safe061.c b/regression/goto-instrument-wmm-core/ppc_safe061_CAV11_ERROR/safe061.c new file mode 100644 index 00000000000..02b219faaff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_CAV11_ERROR/safe061.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe061_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..c19341605e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe061.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_POWER_ALL/safe061.c b/regression/goto-instrument-wmm-core/ppc_safe061_POWER_ALL/safe061.c new file mode 100644 index 00000000000..02b219faaff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_POWER_ALL/safe061.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe061_POWER_ALL/test.desc new file mode 100644 index 00000000000..c2caef19897 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe061.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_POWER_OPC/safe061.c b/regression/goto-instrument-wmm-core/ppc_safe061_POWER_OPC/safe061.c new file mode 100644 index 00000000000..02b219faaff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_POWER_OPC/safe061.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe061_POWER_OPC/test.desc new file mode 100644 index 00000000000..861797b9f31 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe061.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_POWER_OPT/safe061.c b/regression/goto-instrument-wmm-core/ppc_safe061_POWER_OPT/safe061.c new file mode 100644 index 00000000000..02b219faaff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_POWER_OPT/safe061.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe061_POWER_OPT/test.desc new file mode 100644 index 00000000000..8a3a4b8790b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe061.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_PSO_ALL/safe061.c b/regression/goto-instrument-wmm-core/ppc_safe061_PSO_ALL/safe061.c new file mode 100644 index 00000000000..02b219faaff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_PSO_ALL/safe061.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe061_PSO_ALL/test.desc new file mode 100644 index 00000000000..fc82ae49295 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe061.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_PSO_OPC/safe061.c b/regression/goto-instrument-wmm-core/ppc_safe061_PSO_OPC/safe061.c new file mode 100644 index 00000000000..02b219faaff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_PSO_OPC/safe061.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe061_PSO_OPC/test.desc new file mode 100644 index 00000000000..b796e322cf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe061.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_PSO_OPT/safe061.c b/regression/goto-instrument-wmm-core/ppc_safe061_PSO_OPT/safe061.c new file mode 100644 index 00000000000..02b219faaff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_PSO_OPT/safe061.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe061_PSO_OPT/test.desc new file mode 100644 index 00000000000..9382d42f5f2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe061.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_RMO_ALL/safe061.c b/regression/goto-instrument-wmm-core/ppc_safe061_RMO_ALL/safe061.c new file mode 100644 index 00000000000..02b219faaff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_RMO_ALL/safe061.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe061_RMO_ALL/test.desc new file mode 100644 index 00000000000..19fb587b00f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe061.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_RMO_OPC/safe061.c b/regression/goto-instrument-wmm-core/ppc_safe061_RMO_OPC/safe061.c new file mode 100644 index 00000000000..02b219faaff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_RMO_OPC/safe061.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe061_RMO_OPC/test.desc new file mode 100644 index 00000000000..b381227ed12 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe061.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_RMO_OPT/safe061.c b/regression/goto-instrument-wmm-core/ppc_safe061_RMO_OPT/safe061.c new file mode 100644 index 00000000000..02b219faaff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_RMO_OPT/safe061.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe061_RMO_OPT/test.desc new file mode 100644 index 00000000000..798820abc08 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe061.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_SC_SAFE/safe061.c b/regression/goto-instrument-wmm-core/ppc_safe061_SC_SAFE/safe061.c new file mode 100644 index 00000000000..02b219faaff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_SC_SAFE/safe061.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe061_SC_SAFE/test.desc new file mode 100644 index 00000000000..7c1fcc567d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe061.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_TSO_ALL/safe061.c b/regression/goto-instrument-wmm-core/ppc_safe061_TSO_ALL/safe061.c new file mode 100644 index 00000000000..02b219faaff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_TSO_ALL/safe061.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe061_TSO_ALL/test.desc new file mode 100644 index 00000000000..fefbce46d80 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe061.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_TSO_OPC/safe061.c b/regression/goto-instrument-wmm-core/ppc_safe061_TSO_OPC/safe061.c new file mode 100644 index 00000000000..02b219faaff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_TSO_OPC/safe061.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe061_TSO_OPC/test.desc new file mode 100644 index 00000000000..d76f518930c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe061.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_TSO_OPT/safe061.c b/regression/goto-instrument-wmm-core/ppc_safe061_TSO_OPT/safe061.c new file mode 100644 index 00000000000..02b219faaff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_TSO_OPT/safe061.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe061_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe061_TSO_OPT/test.desc new file mode 100644 index 00000000000..8719a985bff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe061_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe061.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_CAV11_ERROR/safe062.c b/regression/goto-instrument-wmm-core/ppc_safe062_CAV11_ERROR/safe062.c new file mode 100644 index 00000000000..6c20ad74834 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_CAV11_ERROR/safe062.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe062_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..16bf59d2c80 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe062.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_POWER_ALL/safe062.c b/regression/goto-instrument-wmm-core/ppc_safe062_POWER_ALL/safe062.c new file mode 100644 index 00000000000..6c20ad74834 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_POWER_ALL/safe062.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe062_POWER_ALL/test.desc new file mode 100644 index 00000000000..59e5df1ba5c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe062.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_POWER_OPC/safe062.c b/regression/goto-instrument-wmm-core/ppc_safe062_POWER_OPC/safe062.c new file mode 100644 index 00000000000..6c20ad74834 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_POWER_OPC/safe062.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe062_POWER_OPC/test.desc new file mode 100644 index 00000000000..3a647029d94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe062.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_POWER_OPT/safe062.c b/regression/goto-instrument-wmm-core/ppc_safe062_POWER_OPT/safe062.c new file mode 100644 index 00000000000..6c20ad74834 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_POWER_OPT/safe062.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe062_POWER_OPT/test.desc new file mode 100644 index 00000000000..3e5d1ddce24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe062.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_PSO_ALL/safe062.c b/regression/goto-instrument-wmm-core/ppc_safe062_PSO_ALL/safe062.c new file mode 100644 index 00000000000..6c20ad74834 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_PSO_ALL/safe062.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe062_PSO_ALL/test.desc new file mode 100644 index 00000000000..133944ddf1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe062.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_PSO_OPC/safe062.c b/regression/goto-instrument-wmm-core/ppc_safe062_PSO_OPC/safe062.c new file mode 100644 index 00000000000..6c20ad74834 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_PSO_OPC/safe062.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe062_PSO_OPC/test.desc new file mode 100644 index 00000000000..2ad05cb3946 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe062.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_PSO_OPT/safe062.c b/regression/goto-instrument-wmm-core/ppc_safe062_PSO_OPT/safe062.c new file mode 100644 index 00000000000..6c20ad74834 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_PSO_OPT/safe062.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe062_PSO_OPT/test.desc new file mode 100644 index 00000000000..8138c29552d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe062.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_RMO_ALL/safe062.c b/regression/goto-instrument-wmm-core/ppc_safe062_RMO_ALL/safe062.c new file mode 100644 index 00000000000..6c20ad74834 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_RMO_ALL/safe062.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe062_RMO_ALL/test.desc new file mode 100644 index 00000000000..911150fe3ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe062.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_RMO_OPC/safe062.c b/regression/goto-instrument-wmm-core/ppc_safe062_RMO_OPC/safe062.c new file mode 100644 index 00000000000..6c20ad74834 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_RMO_OPC/safe062.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe062_RMO_OPC/test.desc new file mode 100644 index 00000000000..81c305ad00a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe062.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_RMO_OPT/safe062.c b/regression/goto-instrument-wmm-core/ppc_safe062_RMO_OPT/safe062.c new file mode 100644 index 00000000000..6c20ad74834 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_RMO_OPT/safe062.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe062_RMO_OPT/test.desc new file mode 100644 index 00000000000..b47b71d7b8c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe062.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_SC_SAFE/safe062.c b/regression/goto-instrument-wmm-core/ppc_safe062_SC_SAFE/safe062.c new file mode 100644 index 00000000000..6c20ad74834 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_SC_SAFE/safe062.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe062_SC_SAFE/test.desc new file mode 100644 index 00000000000..afc9623a5aa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe062.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_TSO_ALL/safe062.c b/regression/goto-instrument-wmm-core/ppc_safe062_TSO_ALL/safe062.c new file mode 100644 index 00000000000..6c20ad74834 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_TSO_ALL/safe062.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe062_TSO_ALL/test.desc new file mode 100644 index 00000000000..5a7b5ea9bd1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe062.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_TSO_OPC/safe062.c b/regression/goto-instrument-wmm-core/ppc_safe062_TSO_OPC/safe062.c new file mode 100644 index 00000000000..6c20ad74834 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_TSO_OPC/safe062.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe062_TSO_OPC/test.desc new file mode 100644 index 00000000000..2afc8b4d793 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe062.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_TSO_OPT/safe062.c b/regression/goto-instrument-wmm-core/ppc_safe062_TSO_OPT/safe062.c new file mode 100644 index 00000000000..6c20ad74834 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_TSO_OPT/safe062.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = 1; + y = __unbuffered_p3_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe062_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe062_TSO_OPT/test.desc new file mode 100644 index 00000000000..714938bfbd0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe062_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe062.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_CAV11_ERROR/safe063.c b/regression/goto-instrument-wmm-core/ppc_safe063_CAV11_ERROR/safe063.c new file mode 100644 index 00000000000..80d8654608e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_CAV11_ERROR/safe063.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe063_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..3463c1ec9e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe063.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_POWER_ALL/safe063.c b/regression/goto-instrument-wmm-core/ppc_safe063_POWER_ALL/safe063.c new file mode 100644 index 00000000000..80d8654608e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_POWER_ALL/safe063.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe063_POWER_ALL/test.desc new file mode 100644 index 00000000000..37ad0286e7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe063.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_POWER_OPC/safe063.c b/regression/goto-instrument-wmm-core/ppc_safe063_POWER_OPC/safe063.c new file mode 100644 index 00000000000..80d8654608e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_POWER_OPC/safe063.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe063_POWER_OPC/test.desc new file mode 100644 index 00000000000..3e5876d9b3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe063.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_POWER_OPT/safe063.c b/regression/goto-instrument-wmm-core/ppc_safe063_POWER_OPT/safe063.c new file mode 100644 index 00000000000..80d8654608e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_POWER_OPT/safe063.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe063_POWER_OPT/test.desc new file mode 100644 index 00000000000..f8ecd6e95f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe063.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_PSO_ALL/safe063.c b/regression/goto-instrument-wmm-core/ppc_safe063_PSO_ALL/safe063.c new file mode 100644 index 00000000000..80d8654608e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_PSO_ALL/safe063.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe063_PSO_ALL/test.desc new file mode 100644 index 00000000000..937d65f4b38 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe063.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_PSO_OPC/safe063.c b/regression/goto-instrument-wmm-core/ppc_safe063_PSO_OPC/safe063.c new file mode 100644 index 00000000000..80d8654608e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_PSO_OPC/safe063.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe063_PSO_OPC/test.desc new file mode 100644 index 00000000000..1097a4c8439 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe063.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_PSO_OPT/safe063.c b/regression/goto-instrument-wmm-core/ppc_safe063_PSO_OPT/safe063.c new file mode 100644 index 00000000000..80d8654608e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_PSO_OPT/safe063.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe063_PSO_OPT/test.desc new file mode 100644 index 00000000000..8c72d821cc9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe063.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_RMO_ALL/safe063.c b/regression/goto-instrument-wmm-core/ppc_safe063_RMO_ALL/safe063.c new file mode 100644 index 00000000000..80d8654608e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_RMO_ALL/safe063.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe063_RMO_ALL/test.desc new file mode 100644 index 00000000000..ff1f3c335eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe063.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_RMO_OPC/safe063.c b/regression/goto-instrument-wmm-core/ppc_safe063_RMO_OPC/safe063.c new file mode 100644 index 00000000000..80d8654608e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_RMO_OPC/safe063.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe063_RMO_OPC/test.desc new file mode 100644 index 00000000000..e90669ed07e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe063.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_RMO_OPT/safe063.c b/regression/goto-instrument-wmm-core/ppc_safe063_RMO_OPT/safe063.c new file mode 100644 index 00000000000..80d8654608e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_RMO_OPT/safe063.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe063_RMO_OPT/test.desc new file mode 100644 index 00000000000..a975917a6fe --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe063.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_SC_SAFE/safe063.c b/regression/goto-instrument-wmm-core/ppc_safe063_SC_SAFE/safe063.c new file mode 100644 index 00000000000..80d8654608e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_SC_SAFE/safe063.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe063_SC_SAFE/test.desc new file mode 100644 index 00000000000..6f5b2d0ace1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe063.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_TSO_ALL/safe063.c b/regression/goto-instrument-wmm-core/ppc_safe063_TSO_ALL/safe063.c new file mode 100644 index 00000000000..80d8654608e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_TSO_ALL/safe063.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe063_TSO_ALL/test.desc new file mode 100644 index 00000000000..4ddfcdd0644 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe063.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_TSO_OPC/safe063.c b/regression/goto-instrument-wmm-core/ppc_safe063_TSO_OPC/safe063.c new file mode 100644 index 00000000000..80d8654608e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_TSO_OPC/safe063.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe063_TSO_OPC/test.desc new file mode 100644 index 00000000000..9d74f9bf08e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe063.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_TSO_OPT/safe063.c b/regression/goto-instrument-wmm-core/ppc_safe063_TSO_OPT/safe063.c new file mode 100644 index 00000000000..80d8654608e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_TSO_OPT/safe063.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe063_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe063_TSO_OPT/test.desc new file mode 100644 index 00000000000..5523ae09a1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe063_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe063.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_CAV11_ERROR/safe064.c b/regression/goto-instrument-wmm-core/ppc_safe064_CAV11_ERROR/safe064.c new file mode 100644 index 00000000000..d83f442f7ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_CAV11_ERROR/safe064.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe064_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..46ad857c352 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe064.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_POWER_ALL/safe064.c b/regression/goto-instrument-wmm-core/ppc_safe064_POWER_ALL/safe064.c new file mode 100644 index 00000000000..d83f442f7ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_POWER_ALL/safe064.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe064_POWER_ALL/test.desc new file mode 100644 index 00000000000..9283f91b3f3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe064.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_POWER_OPC/safe064.c b/regression/goto-instrument-wmm-core/ppc_safe064_POWER_OPC/safe064.c new file mode 100644 index 00000000000..d83f442f7ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_POWER_OPC/safe064.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe064_POWER_OPC/test.desc new file mode 100644 index 00000000000..2d3f1ff470d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe064.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_POWER_OPT/safe064.c b/regression/goto-instrument-wmm-core/ppc_safe064_POWER_OPT/safe064.c new file mode 100644 index 00000000000..d83f442f7ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_POWER_OPT/safe064.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe064_POWER_OPT/test.desc new file mode 100644 index 00000000000..0cadfe5db2c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe064.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_PSO_ALL/safe064.c b/regression/goto-instrument-wmm-core/ppc_safe064_PSO_ALL/safe064.c new file mode 100644 index 00000000000..d83f442f7ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_PSO_ALL/safe064.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe064_PSO_ALL/test.desc new file mode 100644 index 00000000000..0402cca1b71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe064.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_PSO_OPC/safe064.c b/regression/goto-instrument-wmm-core/ppc_safe064_PSO_OPC/safe064.c new file mode 100644 index 00000000000..d83f442f7ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_PSO_OPC/safe064.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe064_PSO_OPC/test.desc new file mode 100644 index 00000000000..73bab6f1823 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe064.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_PSO_OPT/safe064.c b/regression/goto-instrument-wmm-core/ppc_safe064_PSO_OPT/safe064.c new file mode 100644 index 00000000000..d83f442f7ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_PSO_OPT/safe064.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe064_PSO_OPT/test.desc new file mode 100644 index 00000000000..3e4b30acce5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe064.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_RMO_ALL/safe064.c b/regression/goto-instrument-wmm-core/ppc_safe064_RMO_ALL/safe064.c new file mode 100644 index 00000000000..d83f442f7ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_RMO_ALL/safe064.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe064_RMO_ALL/test.desc new file mode 100644 index 00000000000..9b02b7bc9ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe064.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_RMO_OPC/safe064.c b/regression/goto-instrument-wmm-core/ppc_safe064_RMO_OPC/safe064.c new file mode 100644 index 00000000000..d83f442f7ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_RMO_OPC/safe064.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe064_RMO_OPC/test.desc new file mode 100644 index 00000000000..8a477568bc3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe064.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_RMO_OPT/safe064.c b/regression/goto-instrument-wmm-core/ppc_safe064_RMO_OPT/safe064.c new file mode 100644 index 00000000000..d83f442f7ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_RMO_OPT/safe064.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe064_RMO_OPT/test.desc new file mode 100644 index 00000000000..0e124e1ea17 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe064.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_SC_SAFE/safe064.c b/regression/goto-instrument-wmm-core/ppc_safe064_SC_SAFE/safe064.c new file mode 100644 index 00000000000..d83f442f7ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_SC_SAFE/safe064.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe064_SC_SAFE/test.desc new file mode 100644 index 00000000000..1f09a4275cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe064.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_TSO_ALL/safe064.c b/regression/goto-instrument-wmm-core/ppc_safe064_TSO_ALL/safe064.c new file mode 100644 index 00000000000..d83f442f7ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_TSO_ALL/safe064.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe064_TSO_ALL/test.desc new file mode 100644 index 00000000000..6e6b888c194 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe064.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_TSO_OPC/safe064.c b/regression/goto-instrument-wmm-core/ppc_safe064_TSO_OPC/safe064.c new file mode 100644 index 00000000000..d83f442f7ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_TSO_OPC/safe064.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe064_TSO_OPC/test.desc new file mode 100644 index 00000000000..bcaa7df281d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe064.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_TSO_OPT/safe064.c b/regression/goto-instrument-wmm-core/ppc_safe064_TSO_OPT/safe064.c new file mode 100644 index 00000000000..d83f442f7ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_TSO_OPT/safe064.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe064_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe064_TSO_OPT/test.desc new file mode 100644 index 00000000000..0b80746489c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe064_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe064.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_CAV11_ERROR/safe065.c b/regression/goto-instrument-wmm-core/ppc_safe065_CAV11_ERROR/safe065.c new file mode 100644 index 00000000000..108828c30af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_CAV11_ERROR/safe065.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe065_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..75236769949 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe065.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_POWER_ALL/safe065.c b/regression/goto-instrument-wmm-core/ppc_safe065_POWER_ALL/safe065.c new file mode 100644 index 00000000000..108828c30af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_POWER_ALL/safe065.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe065_POWER_ALL/test.desc new file mode 100644 index 00000000000..fb5754869ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe065.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_POWER_OPC/safe065.c b/regression/goto-instrument-wmm-core/ppc_safe065_POWER_OPC/safe065.c new file mode 100644 index 00000000000..108828c30af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_POWER_OPC/safe065.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe065_POWER_OPC/test.desc new file mode 100644 index 00000000000..5da4601f01b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe065.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_POWER_OPT/safe065.c b/regression/goto-instrument-wmm-core/ppc_safe065_POWER_OPT/safe065.c new file mode 100644 index 00000000000..108828c30af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_POWER_OPT/safe065.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe065_POWER_OPT/test.desc new file mode 100644 index 00000000000..69976eb7b80 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe065.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_PSO_ALL/safe065.c b/regression/goto-instrument-wmm-core/ppc_safe065_PSO_ALL/safe065.c new file mode 100644 index 00000000000..108828c30af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_PSO_ALL/safe065.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe065_PSO_ALL/test.desc new file mode 100644 index 00000000000..75bf162b153 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe065.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_PSO_OPC/safe065.c b/regression/goto-instrument-wmm-core/ppc_safe065_PSO_OPC/safe065.c new file mode 100644 index 00000000000..108828c30af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_PSO_OPC/safe065.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe065_PSO_OPC/test.desc new file mode 100644 index 00000000000..fe90f6925a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe065.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_PSO_OPT/safe065.c b/regression/goto-instrument-wmm-core/ppc_safe065_PSO_OPT/safe065.c new file mode 100644 index 00000000000..108828c30af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_PSO_OPT/safe065.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe065_PSO_OPT/test.desc new file mode 100644 index 00000000000..303d0d01217 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe065.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_RMO_ALL/safe065.c b/regression/goto-instrument-wmm-core/ppc_safe065_RMO_ALL/safe065.c new file mode 100644 index 00000000000..108828c30af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_RMO_ALL/safe065.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe065_RMO_ALL/test.desc new file mode 100644 index 00000000000..5dfc2e00091 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe065.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_RMO_OPC/safe065.c b/regression/goto-instrument-wmm-core/ppc_safe065_RMO_OPC/safe065.c new file mode 100644 index 00000000000..108828c30af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_RMO_OPC/safe065.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe065_RMO_OPC/test.desc new file mode 100644 index 00000000000..fc82505d301 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe065.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_RMO_OPT/safe065.c b/regression/goto-instrument-wmm-core/ppc_safe065_RMO_OPT/safe065.c new file mode 100644 index 00000000000..108828c30af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_RMO_OPT/safe065.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe065_RMO_OPT/test.desc new file mode 100644 index 00000000000..1a9ef53a73e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe065.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_SC_SAFE/safe065.c b/regression/goto-instrument-wmm-core/ppc_safe065_SC_SAFE/safe065.c new file mode 100644 index 00000000000..108828c30af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_SC_SAFE/safe065.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe065_SC_SAFE/test.desc new file mode 100644 index 00000000000..146a3f1fd59 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe065.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_TSO_ALL/safe065.c b/regression/goto-instrument-wmm-core/ppc_safe065_TSO_ALL/safe065.c new file mode 100644 index 00000000000..108828c30af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_TSO_ALL/safe065.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe065_TSO_ALL/test.desc new file mode 100644 index 00000000000..ebba8171d98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe065.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_TSO_OPC/safe065.c b/regression/goto-instrument-wmm-core/ppc_safe065_TSO_OPC/safe065.c new file mode 100644 index 00000000000..108828c30af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_TSO_OPC/safe065.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe065_TSO_OPC/test.desc new file mode 100644 index 00000000000..32436c51bc5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe065.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_TSO_OPT/safe065.c b/regression/goto-instrument-wmm-core/ppc_safe065_TSO_OPT/safe065.c new file mode 100644 index 00000000000..108828c30af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_TSO_OPT/safe065.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe065_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe065_TSO_OPT/test.desc new file mode 100644 index 00000000000..910c5c51560 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe065_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe065.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_CAV11_ERROR/safe066.c b/regression/goto-instrument-wmm-core/ppc_safe066_CAV11_ERROR/safe066.c new file mode 100644 index 00000000000..b489ab20d6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_CAV11_ERROR/safe066.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe066_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..d0af333a6a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe066.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_POWER_ALL/safe066.c b/regression/goto-instrument-wmm-core/ppc_safe066_POWER_ALL/safe066.c new file mode 100644 index 00000000000..b489ab20d6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_POWER_ALL/safe066.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe066_POWER_ALL/test.desc new file mode 100644 index 00000000000..13eabde320d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe066.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_POWER_OPC/safe066.c b/regression/goto-instrument-wmm-core/ppc_safe066_POWER_OPC/safe066.c new file mode 100644 index 00000000000..b489ab20d6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_POWER_OPC/safe066.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe066_POWER_OPC/test.desc new file mode 100644 index 00000000000..f2b75b3c82d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe066.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_POWER_OPT/safe066.c b/regression/goto-instrument-wmm-core/ppc_safe066_POWER_OPT/safe066.c new file mode 100644 index 00000000000..b489ab20d6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_POWER_OPT/safe066.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe066_POWER_OPT/test.desc new file mode 100644 index 00000000000..f9dc1df1d7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe066.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_PSO_ALL/safe066.c b/regression/goto-instrument-wmm-core/ppc_safe066_PSO_ALL/safe066.c new file mode 100644 index 00000000000..b489ab20d6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_PSO_ALL/safe066.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe066_PSO_ALL/test.desc new file mode 100644 index 00000000000..47986f0a5d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe066.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_PSO_OPC/safe066.c b/regression/goto-instrument-wmm-core/ppc_safe066_PSO_OPC/safe066.c new file mode 100644 index 00000000000..b489ab20d6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_PSO_OPC/safe066.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe066_PSO_OPC/test.desc new file mode 100644 index 00000000000..4457f2a1c89 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe066.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_PSO_OPT/safe066.c b/regression/goto-instrument-wmm-core/ppc_safe066_PSO_OPT/safe066.c new file mode 100644 index 00000000000..b489ab20d6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_PSO_OPT/safe066.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe066_PSO_OPT/test.desc new file mode 100644 index 00000000000..22338feaab5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe066.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_RMO_ALL/safe066.c b/regression/goto-instrument-wmm-core/ppc_safe066_RMO_ALL/safe066.c new file mode 100644 index 00000000000..b489ab20d6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_RMO_ALL/safe066.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe066_RMO_ALL/test.desc new file mode 100644 index 00000000000..5c54ff8fb2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe066.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_RMO_OPC/safe066.c b/regression/goto-instrument-wmm-core/ppc_safe066_RMO_OPC/safe066.c new file mode 100644 index 00000000000..b489ab20d6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_RMO_OPC/safe066.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe066_RMO_OPC/test.desc new file mode 100644 index 00000000000..062725db0a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe066.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_RMO_OPT/safe066.c b/regression/goto-instrument-wmm-core/ppc_safe066_RMO_OPT/safe066.c new file mode 100644 index 00000000000..b489ab20d6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_RMO_OPT/safe066.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe066_RMO_OPT/test.desc new file mode 100644 index 00000000000..c596535ec2c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe066.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_SC_SAFE/safe066.c b/regression/goto-instrument-wmm-core/ppc_safe066_SC_SAFE/safe066.c new file mode 100644 index 00000000000..b489ab20d6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_SC_SAFE/safe066.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe066_SC_SAFE/test.desc new file mode 100644 index 00000000000..2a57d62ae3e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe066.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_TSO_ALL/safe066.c b/regression/goto-instrument-wmm-core/ppc_safe066_TSO_ALL/safe066.c new file mode 100644 index 00000000000..b489ab20d6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_TSO_ALL/safe066.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe066_TSO_ALL/test.desc new file mode 100644 index 00000000000..b0c5cd86ae9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe066.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_TSO_OPC/safe066.c b/regression/goto-instrument-wmm-core/ppc_safe066_TSO_OPC/safe066.c new file mode 100644 index 00000000000..b489ab20d6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_TSO_OPC/safe066.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe066_TSO_OPC/test.desc new file mode 100644 index 00000000000..476c63a5b92 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe066.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_TSO_OPT/safe066.c b/regression/goto-instrument-wmm-core/ppc_safe066_TSO_OPT/safe066.c new file mode 100644 index 00000000000..b489ab20d6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_TSO_OPT/safe066.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe066_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe066_TSO_OPT/test.desc new file mode 100644 index 00000000000..998205d07e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe066_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe066.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_CAV11_ERROR/safe067.c b/regression/goto-instrument-wmm-core/ppc_safe067_CAV11_ERROR/safe067.c new file mode 100644 index 00000000000..18d1bfa543c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_CAV11_ERROR/safe067.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe067_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..a7513057421 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe067.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_POWER_ALL/safe067.c b/regression/goto-instrument-wmm-core/ppc_safe067_POWER_ALL/safe067.c new file mode 100644 index 00000000000..18d1bfa543c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_POWER_ALL/safe067.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe067_POWER_ALL/test.desc new file mode 100644 index 00000000000..63d05bffd7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe067.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_POWER_OPC/safe067.c b/regression/goto-instrument-wmm-core/ppc_safe067_POWER_OPC/safe067.c new file mode 100644 index 00000000000..18d1bfa543c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_POWER_OPC/safe067.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe067_POWER_OPC/test.desc new file mode 100644 index 00000000000..2357eccb541 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe067.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_POWER_OPT/safe067.c b/regression/goto-instrument-wmm-core/ppc_safe067_POWER_OPT/safe067.c new file mode 100644 index 00000000000..18d1bfa543c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_POWER_OPT/safe067.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe067_POWER_OPT/test.desc new file mode 100644 index 00000000000..52aee5e69d7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe067.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_PSO_ALL/safe067.c b/regression/goto-instrument-wmm-core/ppc_safe067_PSO_ALL/safe067.c new file mode 100644 index 00000000000..18d1bfa543c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_PSO_ALL/safe067.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe067_PSO_ALL/test.desc new file mode 100644 index 00000000000..c5f550a805d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe067.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_PSO_OPC/safe067.c b/regression/goto-instrument-wmm-core/ppc_safe067_PSO_OPC/safe067.c new file mode 100644 index 00000000000..18d1bfa543c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_PSO_OPC/safe067.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe067_PSO_OPC/test.desc new file mode 100644 index 00000000000..5062887cb53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe067.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_PSO_OPT/safe067.c b/regression/goto-instrument-wmm-core/ppc_safe067_PSO_OPT/safe067.c new file mode 100644 index 00000000000..18d1bfa543c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_PSO_OPT/safe067.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe067_PSO_OPT/test.desc new file mode 100644 index 00000000000..149d57c72a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe067.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_RMO_ALL/safe067.c b/regression/goto-instrument-wmm-core/ppc_safe067_RMO_ALL/safe067.c new file mode 100644 index 00000000000..18d1bfa543c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_RMO_ALL/safe067.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe067_RMO_ALL/test.desc new file mode 100644 index 00000000000..13501802f67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe067.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_RMO_OPC/safe067.c b/regression/goto-instrument-wmm-core/ppc_safe067_RMO_OPC/safe067.c new file mode 100644 index 00000000000..18d1bfa543c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_RMO_OPC/safe067.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe067_RMO_OPC/test.desc new file mode 100644 index 00000000000..51da6e13b36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe067.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_RMO_OPT/safe067.c b/regression/goto-instrument-wmm-core/ppc_safe067_RMO_OPT/safe067.c new file mode 100644 index 00000000000..18d1bfa543c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_RMO_OPT/safe067.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe067_RMO_OPT/test.desc new file mode 100644 index 00000000000..95b4526e740 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe067.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_SC_SAFE/safe067.c b/regression/goto-instrument-wmm-core/ppc_safe067_SC_SAFE/safe067.c new file mode 100644 index 00000000000..18d1bfa543c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_SC_SAFE/safe067.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe067_SC_SAFE/test.desc new file mode 100644 index 00000000000..89508174993 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe067.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_TSO_ALL/safe067.c b/regression/goto-instrument-wmm-core/ppc_safe067_TSO_ALL/safe067.c new file mode 100644 index 00000000000..18d1bfa543c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_TSO_ALL/safe067.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe067_TSO_ALL/test.desc new file mode 100644 index 00000000000..a35e01b01f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe067.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_TSO_OPC/safe067.c b/regression/goto-instrument-wmm-core/ppc_safe067_TSO_OPC/safe067.c new file mode 100644 index 00000000000..18d1bfa543c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_TSO_OPC/safe067.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe067_TSO_OPC/test.desc new file mode 100644 index 00000000000..983a9f0990c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe067.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_TSO_OPT/safe067.c b/regression/goto-instrument-wmm-core/ppc_safe067_TSO_OPT/safe067.c new file mode 100644 index 00000000000..18d1bfa543c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_TSO_OPT/safe067.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe067_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe067_TSO_OPT/test.desc new file mode 100644 index 00000000000..317f4457ded --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe067_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe067.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_CAV11_ERROR/safe068.c b/regression/goto-instrument-wmm-core/ppc_safe068_CAV11_ERROR/safe068.c new file mode 100644 index 00000000000..b266f5eb4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_CAV11_ERROR/safe068.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe068_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..51c6bbe870f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe068.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_POWER_ALL/safe068.c b/regression/goto-instrument-wmm-core/ppc_safe068_POWER_ALL/safe068.c new file mode 100644 index 00000000000..b266f5eb4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_POWER_ALL/safe068.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe068_POWER_ALL/test.desc new file mode 100644 index 00000000000..bd2690e6e31 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe068.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_POWER_OPC/safe068.c b/regression/goto-instrument-wmm-core/ppc_safe068_POWER_OPC/safe068.c new file mode 100644 index 00000000000..b266f5eb4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_POWER_OPC/safe068.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe068_POWER_OPC/test.desc new file mode 100644 index 00000000000..651bec21a21 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe068.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_POWER_OPT/safe068.c b/regression/goto-instrument-wmm-core/ppc_safe068_POWER_OPT/safe068.c new file mode 100644 index 00000000000..b266f5eb4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_POWER_OPT/safe068.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe068_POWER_OPT/test.desc new file mode 100644 index 00000000000..8e94823d4a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe068.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_PSO_ALL/safe068.c b/regression/goto-instrument-wmm-core/ppc_safe068_PSO_ALL/safe068.c new file mode 100644 index 00000000000..b266f5eb4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_PSO_ALL/safe068.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe068_PSO_ALL/test.desc new file mode 100644 index 00000000000..a0612353cf8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe068.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_PSO_OPC/safe068.c b/regression/goto-instrument-wmm-core/ppc_safe068_PSO_OPC/safe068.c new file mode 100644 index 00000000000..b266f5eb4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_PSO_OPC/safe068.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe068_PSO_OPC/test.desc new file mode 100644 index 00000000000..fa2f7256f6c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe068.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_PSO_OPT/safe068.c b/regression/goto-instrument-wmm-core/ppc_safe068_PSO_OPT/safe068.c new file mode 100644 index 00000000000..b266f5eb4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_PSO_OPT/safe068.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe068_PSO_OPT/test.desc new file mode 100644 index 00000000000..7400be5a813 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe068.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_RMO_ALL/safe068.c b/regression/goto-instrument-wmm-core/ppc_safe068_RMO_ALL/safe068.c new file mode 100644 index 00000000000..b266f5eb4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_RMO_ALL/safe068.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe068_RMO_ALL/test.desc new file mode 100644 index 00000000000..eb0cdf31dc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe068.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_RMO_OPC/safe068.c b/regression/goto-instrument-wmm-core/ppc_safe068_RMO_OPC/safe068.c new file mode 100644 index 00000000000..b266f5eb4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_RMO_OPC/safe068.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe068_RMO_OPC/test.desc new file mode 100644 index 00000000000..d1da39576c9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe068.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_RMO_OPT/safe068.c b/regression/goto-instrument-wmm-core/ppc_safe068_RMO_OPT/safe068.c new file mode 100644 index 00000000000..b266f5eb4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_RMO_OPT/safe068.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe068_RMO_OPT/test.desc new file mode 100644 index 00000000000..3b48db7e2fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe068.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_SC_SAFE/safe068.c b/regression/goto-instrument-wmm-core/ppc_safe068_SC_SAFE/safe068.c new file mode 100644 index 00000000000..b266f5eb4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_SC_SAFE/safe068.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe068_SC_SAFE/test.desc new file mode 100644 index 00000000000..b2e8d386e17 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe068.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_TSO_ALL/safe068.c b/regression/goto-instrument-wmm-core/ppc_safe068_TSO_ALL/safe068.c new file mode 100644 index 00000000000..b266f5eb4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_TSO_ALL/safe068.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe068_TSO_ALL/test.desc new file mode 100644 index 00000000000..b07f7eee1ee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe068.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_TSO_OPC/safe068.c b/regression/goto-instrument-wmm-core/ppc_safe068_TSO_OPC/safe068.c new file mode 100644 index 00000000000..b266f5eb4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_TSO_OPC/safe068.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe068_TSO_OPC/test.desc new file mode 100644 index 00000000000..8dde4b9a9d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe068.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_TSO_OPT/safe068.c b/regression/goto-instrument-wmm-core/ppc_safe068_TSO_OPT/safe068.c new file mode 100644 index 00000000000..b266f5eb4a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_TSO_OPT/safe068.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe068_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe068_TSO_OPT/test.desc new file mode 100644 index 00000000000..f2478bbce31 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe068_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe068.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_CAV11_ERROR/safe069.c b/regression/goto-instrument-wmm-core/ppc_safe069_CAV11_ERROR/safe069.c new file mode 100644 index 00000000000..daec35a7f7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_CAV11_ERROR/safe069.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe069_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..20e18aac79f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe069.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_POWER_ALL/safe069.c b/regression/goto-instrument-wmm-core/ppc_safe069_POWER_ALL/safe069.c new file mode 100644 index 00000000000..daec35a7f7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_POWER_ALL/safe069.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe069_POWER_ALL/test.desc new file mode 100644 index 00000000000..da8dff6b768 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe069.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_POWER_OPC/safe069.c b/regression/goto-instrument-wmm-core/ppc_safe069_POWER_OPC/safe069.c new file mode 100644 index 00000000000..daec35a7f7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_POWER_OPC/safe069.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe069_POWER_OPC/test.desc new file mode 100644 index 00000000000..84f00437986 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe069.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_POWER_OPT/safe069.c b/regression/goto-instrument-wmm-core/ppc_safe069_POWER_OPT/safe069.c new file mode 100644 index 00000000000..daec35a7f7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_POWER_OPT/safe069.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe069_POWER_OPT/test.desc new file mode 100644 index 00000000000..ca1b4177bf0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe069.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_PSO_ALL/safe069.c b/regression/goto-instrument-wmm-core/ppc_safe069_PSO_ALL/safe069.c new file mode 100644 index 00000000000..daec35a7f7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_PSO_ALL/safe069.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe069_PSO_ALL/test.desc new file mode 100644 index 00000000000..14f7c59bd56 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe069.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_PSO_OPC/safe069.c b/regression/goto-instrument-wmm-core/ppc_safe069_PSO_OPC/safe069.c new file mode 100644 index 00000000000..daec35a7f7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_PSO_OPC/safe069.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe069_PSO_OPC/test.desc new file mode 100644 index 00000000000..326a078c443 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe069.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_PSO_OPT/safe069.c b/regression/goto-instrument-wmm-core/ppc_safe069_PSO_OPT/safe069.c new file mode 100644 index 00000000000..daec35a7f7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_PSO_OPT/safe069.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe069_PSO_OPT/test.desc new file mode 100644 index 00000000000..b0853658441 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe069.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_RMO_ALL/safe069.c b/regression/goto-instrument-wmm-core/ppc_safe069_RMO_ALL/safe069.c new file mode 100644 index 00000000000..daec35a7f7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_RMO_ALL/safe069.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe069_RMO_ALL/test.desc new file mode 100644 index 00000000000..bc448f9d5a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe069.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_RMO_OPC/safe069.c b/regression/goto-instrument-wmm-core/ppc_safe069_RMO_OPC/safe069.c new file mode 100644 index 00000000000..daec35a7f7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_RMO_OPC/safe069.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe069_RMO_OPC/test.desc new file mode 100644 index 00000000000..4d69557482c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe069.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_RMO_OPT/safe069.c b/regression/goto-instrument-wmm-core/ppc_safe069_RMO_OPT/safe069.c new file mode 100644 index 00000000000..daec35a7f7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_RMO_OPT/safe069.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe069_RMO_OPT/test.desc new file mode 100644 index 00000000000..37772c79f2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe069.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_SC_SAFE/safe069.c b/regression/goto-instrument-wmm-core/ppc_safe069_SC_SAFE/safe069.c new file mode 100644 index 00000000000..daec35a7f7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_SC_SAFE/safe069.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe069_SC_SAFE/test.desc new file mode 100644 index 00000000000..8920287c8d7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe069.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_TSO_ALL/safe069.c b/regression/goto-instrument-wmm-core/ppc_safe069_TSO_ALL/safe069.c new file mode 100644 index 00000000000..daec35a7f7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_TSO_ALL/safe069.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe069_TSO_ALL/test.desc new file mode 100644 index 00000000000..2783e66a15d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe069.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_TSO_OPC/safe069.c b/regression/goto-instrument-wmm-core/ppc_safe069_TSO_OPC/safe069.c new file mode 100644 index 00000000000..daec35a7f7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_TSO_OPC/safe069.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe069_TSO_OPC/test.desc new file mode 100644 index 00000000000..d519e9156ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe069.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_TSO_OPT/safe069.c b/regression/goto-instrument-wmm-core/ppc_safe069_TSO_OPT/safe069.c new file mode 100644 index 00000000000..daec35a7f7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_TSO_OPT/safe069.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe069_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe069_TSO_OPT/test.desc new file mode 100644 index 00000000000..81e8dece6aa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe069_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe069.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_CAV11_ERROR/safe070.c b/regression/goto-instrument-wmm-core/ppc_safe070_CAV11_ERROR/safe070.c new file mode 100644 index 00000000000..e31b62f95be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_CAV11_ERROR/safe070.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe070_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..79227329759 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe070.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_POWER_ALL/safe070.c b/regression/goto-instrument-wmm-core/ppc_safe070_POWER_ALL/safe070.c new file mode 100644 index 00000000000..e31b62f95be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_POWER_ALL/safe070.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe070_POWER_ALL/test.desc new file mode 100644 index 00000000000..cc889c70a34 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe070.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_POWER_OPC/safe070.c b/regression/goto-instrument-wmm-core/ppc_safe070_POWER_OPC/safe070.c new file mode 100644 index 00000000000..e31b62f95be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_POWER_OPC/safe070.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe070_POWER_OPC/test.desc new file mode 100644 index 00000000000..7db020cd98c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe070.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_POWER_OPT/safe070.c b/regression/goto-instrument-wmm-core/ppc_safe070_POWER_OPT/safe070.c new file mode 100644 index 00000000000..e31b62f95be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_POWER_OPT/safe070.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe070_POWER_OPT/test.desc new file mode 100644 index 00000000000..4aee54dc60d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe070.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_PSO_ALL/safe070.c b/regression/goto-instrument-wmm-core/ppc_safe070_PSO_ALL/safe070.c new file mode 100644 index 00000000000..e31b62f95be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_PSO_ALL/safe070.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe070_PSO_ALL/test.desc new file mode 100644 index 00000000000..0405d5b6e30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe070.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_PSO_OPC/safe070.c b/regression/goto-instrument-wmm-core/ppc_safe070_PSO_OPC/safe070.c new file mode 100644 index 00000000000..e31b62f95be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_PSO_OPC/safe070.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe070_PSO_OPC/test.desc new file mode 100644 index 00000000000..7b7244c01ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe070.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_PSO_OPT/safe070.c b/regression/goto-instrument-wmm-core/ppc_safe070_PSO_OPT/safe070.c new file mode 100644 index 00000000000..e31b62f95be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_PSO_OPT/safe070.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe070_PSO_OPT/test.desc new file mode 100644 index 00000000000..a334b207546 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe070.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_RMO_ALL/safe070.c b/regression/goto-instrument-wmm-core/ppc_safe070_RMO_ALL/safe070.c new file mode 100644 index 00000000000..e31b62f95be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_RMO_ALL/safe070.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe070_RMO_ALL/test.desc new file mode 100644 index 00000000000..e5f18646b47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe070.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_RMO_OPC/safe070.c b/regression/goto-instrument-wmm-core/ppc_safe070_RMO_OPC/safe070.c new file mode 100644 index 00000000000..e31b62f95be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_RMO_OPC/safe070.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe070_RMO_OPC/test.desc new file mode 100644 index 00000000000..6844e33eed1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe070.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_RMO_OPT/safe070.c b/regression/goto-instrument-wmm-core/ppc_safe070_RMO_OPT/safe070.c new file mode 100644 index 00000000000..e31b62f95be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_RMO_OPT/safe070.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe070_RMO_OPT/test.desc new file mode 100644 index 00000000000..fa5372150df --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe070.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_SC_SAFE/safe070.c b/regression/goto-instrument-wmm-core/ppc_safe070_SC_SAFE/safe070.c new file mode 100644 index 00000000000..e31b62f95be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_SC_SAFE/safe070.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe070_SC_SAFE/test.desc new file mode 100644 index 00000000000..87c8c7a9326 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe070.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_TSO_ALL/safe070.c b/regression/goto-instrument-wmm-core/ppc_safe070_TSO_ALL/safe070.c new file mode 100644 index 00000000000..e31b62f95be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_TSO_ALL/safe070.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe070_TSO_ALL/test.desc new file mode 100644 index 00000000000..01cd5bcb1c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe070.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_TSO_OPC/safe070.c b/regression/goto-instrument-wmm-core/ppc_safe070_TSO_OPC/safe070.c new file mode 100644 index 00000000000..e31b62f95be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_TSO_OPC/safe070.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe070_TSO_OPC/test.desc new file mode 100644 index 00000000000..d9f848f8d47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe070.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_TSO_OPT/safe070.c b/regression/goto-instrument-wmm-core/ppc_safe070_TSO_OPT/safe070.c new file mode 100644 index 00000000000..e31b62f95be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_TSO_OPT/safe070.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe070_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe070_TSO_OPT/test.desc new file mode 100644 index 00000000000..6ce9263fc2b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe070_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe070.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_CAV11_ERROR/safe071.c b/regression/goto-instrument-wmm-core/ppc_safe071_CAV11_ERROR/safe071.c new file mode 100644 index 00000000000..0fd5fe01736 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_CAV11_ERROR/safe071.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe071_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..6bd1d25d847 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe071.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_POWER_ALL/safe071.c b/regression/goto-instrument-wmm-core/ppc_safe071_POWER_ALL/safe071.c new file mode 100644 index 00000000000..0fd5fe01736 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_POWER_ALL/safe071.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe071_POWER_ALL/test.desc new file mode 100644 index 00000000000..d96ee30a9d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe071.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_POWER_OPC/safe071.c b/regression/goto-instrument-wmm-core/ppc_safe071_POWER_OPC/safe071.c new file mode 100644 index 00000000000..0fd5fe01736 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_POWER_OPC/safe071.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe071_POWER_OPC/test.desc new file mode 100644 index 00000000000..aee114786ee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe071.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_POWER_OPT/safe071.c b/regression/goto-instrument-wmm-core/ppc_safe071_POWER_OPT/safe071.c new file mode 100644 index 00000000000..0fd5fe01736 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_POWER_OPT/safe071.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe071_POWER_OPT/test.desc new file mode 100644 index 00000000000..8c76d20426d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe071.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_PSO_ALL/safe071.c b/regression/goto-instrument-wmm-core/ppc_safe071_PSO_ALL/safe071.c new file mode 100644 index 00000000000..0fd5fe01736 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_PSO_ALL/safe071.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe071_PSO_ALL/test.desc new file mode 100644 index 00000000000..fc3ef519d1c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe071.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_PSO_OPC/safe071.c b/regression/goto-instrument-wmm-core/ppc_safe071_PSO_OPC/safe071.c new file mode 100644 index 00000000000..0fd5fe01736 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_PSO_OPC/safe071.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe071_PSO_OPC/test.desc new file mode 100644 index 00000000000..3e2bb3a5dda --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe071.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_PSO_OPT/safe071.c b/regression/goto-instrument-wmm-core/ppc_safe071_PSO_OPT/safe071.c new file mode 100644 index 00000000000..0fd5fe01736 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_PSO_OPT/safe071.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe071_PSO_OPT/test.desc new file mode 100644 index 00000000000..a7cd48f8f95 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe071.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_RMO_ALL/safe071.c b/regression/goto-instrument-wmm-core/ppc_safe071_RMO_ALL/safe071.c new file mode 100644 index 00000000000..0fd5fe01736 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_RMO_ALL/safe071.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe071_RMO_ALL/test.desc new file mode 100644 index 00000000000..96984463316 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe071.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_RMO_OPC/safe071.c b/regression/goto-instrument-wmm-core/ppc_safe071_RMO_OPC/safe071.c new file mode 100644 index 00000000000..0fd5fe01736 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_RMO_OPC/safe071.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe071_RMO_OPC/test.desc new file mode 100644 index 00000000000..7dea4667dd1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe071.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_RMO_OPT/safe071.c b/regression/goto-instrument-wmm-core/ppc_safe071_RMO_OPT/safe071.c new file mode 100644 index 00000000000..0fd5fe01736 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_RMO_OPT/safe071.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe071_RMO_OPT/test.desc new file mode 100644 index 00000000000..6db3b5d5474 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe071.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_SC_SAFE/safe071.c b/regression/goto-instrument-wmm-core/ppc_safe071_SC_SAFE/safe071.c new file mode 100644 index 00000000000..0fd5fe01736 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_SC_SAFE/safe071.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe071_SC_SAFE/test.desc new file mode 100644 index 00000000000..119319bada2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe071.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_TSO_ALL/safe071.c b/regression/goto-instrument-wmm-core/ppc_safe071_TSO_ALL/safe071.c new file mode 100644 index 00000000000..0fd5fe01736 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_TSO_ALL/safe071.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe071_TSO_ALL/test.desc new file mode 100644 index 00000000000..b8ae9995350 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe071.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_TSO_OPC/safe071.c b/regression/goto-instrument-wmm-core/ppc_safe071_TSO_OPC/safe071.c new file mode 100644 index 00000000000..0fd5fe01736 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_TSO_OPC/safe071.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe071_TSO_OPC/test.desc new file mode 100644 index 00000000000..74a8e550ea6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe071.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_TSO_OPT/safe071.c b/regression/goto-instrument-wmm-core/ppc_safe071_TSO_OPT/safe071.c new file mode 100644 index 00000000000..0fd5fe01736 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_TSO_OPT/safe071.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = 1; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe071_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe071_TSO_OPT/test.desc new file mode 100644 index 00000000000..cfd0537462f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe071_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe071.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_CAV11_ERROR/safe072.c b/regression/goto-instrument-wmm-core/ppc_safe072_CAV11_ERROR/safe072.c new file mode 100644 index 00000000000..b867a5ce470 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_CAV11_ERROR/safe072.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe072_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..ef8661b4948 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe072.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_POWER_ALL/safe072.c b/regression/goto-instrument-wmm-core/ppc_safe072_POWER_ALL/safe072.c new file mode 100644 index 00000000000..b867a5ce470 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_POWER_ALL/safe072.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe072_POWER_ALL/test.desc new file mode 100644 index 00000000000..28eba313cde --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe072.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_POWER_OPC/safe072.c b/regression/goto-instrument-wmm-core/ppc_safe072_POWER_OPC/safe072.c new file mode 100644 index 00000000000..b867a5ce470 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_POWER_OPC/safe072.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe072_POWER_OPC/test.desc new file mode 100644 index 00000000000..9b70d8772bf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe072.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_POWER_OPT/safe072.c b/regression/goto-instrument-wmm-core/ppc_safe072_POWER_OPT/safe072.c new file mode 100644 index 00000000000..b867a5ce470 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_POWER_OPT/safe072.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe072_POWER_OPT/test.desc new file mode 100644 index 00000000000..edfe81fdb09 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe072.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_PSO_ALL/safe072.c b/regression/goto-instrument-wmm-core/ppc_safe072_PSO_ALL/safe072.c new file mode 100644 index 00000000000..b867a5ce470 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_PSO_ALL/safe072.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe072_PSO_ALL/test.desc new file mode 100644 index 00000000000..118bc2f5bdd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe072.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_PSO_OPC/safe072.c b/regression/goto-instrument-wmm-core/ppc_safe072_PSO_OPC/safe072.c new file mode 100644 index 00000000000..b867a5ce470 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_PSO_OPC/safe072.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe072_PSO_OPC/test.desc new file mode 100644 index 00000000000..89b13107eeb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe072.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_PSO_OPT/safe072.c b/regression/goto-instrument-wmm-core/ppc_safe072_PSO_OPT/safe072.c new file mode 100644 index 00000000000..b867a5ce470 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_PSO_OPT/safe072.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe072_PSO_OPT/test.desc new file mode 100644 index 00000000000..0a49aaf8fee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe072.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_RMO_ALL/safe072.c b/regression/goto-instrument-wmm-core/ppc_safe072_RMO_ALL/safe072.c new file mode 100644 index 00000000000..b867a5ce470 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_RMO_ALL/safe072.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe072_RMO_ALL/test.desc new file mode 100644 index 00000000000..1325d136655 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe072.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_RMO_OPC/safe072.c b/regression/goto-instrument-wmm-core/ppc_safe072_RMO_OPC/safe072.c new file mode 100644 index 00000000000..b867a5ce470 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_RMO_OPC/safe072.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe072_RMO_OPC/test.desc new file mode 100644 index 00000000000..bf8a8a6a5c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe072.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_RMO_OPT/safe072.c b/regression/goto-instrument-wmm-core/ppc_safe072_RMO_OPT/safe072.c new file mode 100644 index 00000000000..b867a5ce470 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_RMO_OPT/safe072.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe072_RMO_OPT/test.desc new file mode 100644 index 00000000000..0739872718f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe072.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_SC_SAFE/safe072.c b/regression/goto-instrument-wmm-core/ppc_safe072_SC_SAFE/safe072.c new file mode 100644 index 00000000000..b867a5ce470 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_SC_SAFE/safe072.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe072_SC_SAFE/test.desc new file mode 100644 index 00000000000..620020f459d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe072.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_TSO_ALL/safe072.c b/regression/goto-instrument-wmm-core/ppc_safe072_TSO_ALL/safe072.c new file mode 100644 index 00000000000..b867a5ce470 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_TSO_ALL/safe072.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe072_TSO_ALL/test.desc new file mode 100644 index 00000000000..f959cbb836d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe072.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_TSO_OPC/safe072.c b/regression/goto-instrument-wmm-core/ppc_safe072_TSO_OPC/safe072.c new file mode 100644 index 00000000000..b867a5ce470 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_TSO_OPC/safe072.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe072_TSO_OPC/test.desc new file mode 100644 index 00000000000..f34f107a668 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe072.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_TSO_OPT/safe072.c b/regression/goto-instrument-wmm-core/ppc_safe072_TSO_OPT/safe072.c new file mode 100644 index 00000000000..b867a5ce470 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_TSO_OPT/safe072.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe072_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe072_TSO_OPT/test.desc new file mode 100644 index 00000000000..b71c232f03f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe072_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe072.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_CAV11_SAFE/safe073.c b/regression/goto-instrument-wmm-core/ppc_safe073_CAV11_SAFE/safe073.c new file mode 100644 index 00000000000..96678d4f82c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_CAV11_SAFE/safe073.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe073_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..e2e31184e91 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe073.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_POWER_ALL/safe073.c b/regression/goto-instrument-wmm-core/ppc_safe073_POWER_ALL/safe073.c new file mode 100644 index 00000000000..96678d4f82c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_POWER_ALL/safe073.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe073_POWER_ALL/test.desc new file mode 100644 index 00000000000..ddfd9e25cb4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe073.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_POWER_OPC/safe073.c b/regression/goto-instrument-wmm-core/ppc_safe073_POWER_OPC/safe073.c new file mode 100644 index 00000000000..96678d4f82c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_POWER_OPC/safe073.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe073_POWER_OPC/test.desc new file mode 100644 index 00000000000..8c0d472f32f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe073.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_POWER_OPT/safe073.c b/regression/goto-instrument-wmm-core/ppc_safe073_POWER_OPT/safe073.c new file mode 100644 index 00000000000..96678d4f82c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_POWER_OPT/safe073.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe073_POWER_OPT/test.desc new file mode 100644 index 00000000000..c4bc6e99599 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe073.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_PSO_ALL/safe073.c b/regression/goto-instrument-wmm-core/ppc_safe073_PSO_ALL/safe073.c new file mode 100644 index 00000000000..96678d4f82c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_PSO_ALL/safe073.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe073_PSO_ALL/test.desc new file mode 100644 index 00000000000..66d2b931734 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe073.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_PSO_OPC/safe073.c b/regression/goto-instrument-wmm-core/ppc_safe073_PSO_OPC/safe073.c new file mode 100644 index 00000000000..96678d4f82c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_PSO_OPC/safe073.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe073_PSO_OPC/test.desc new file mode 100644 index 00000000000..f0e4741cbfd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe073.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_PSO_OPT/safe073.c b/regression/goto-instrument-wmm-core/ppc_safe073_PSO_OPT/safe073.c new file mode 100644 index 00000000000..96678d4f82c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_PSO_OPT/safe073.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe073_PSO_OPT/test.desc new file mode 100644 index 00000000000..5cee5dbf6bf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe073.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_RMO_ALL/safe073.c b/regression/goto-instrument-wmm-core/ppc_safe073_RMO_ALL/safe073.c new file mode 100644 index 00000000000..96678d4f82c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_RMO_ALL/safe073.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe073_RMO_ALL/test.desc new file mode 100644 index 00000000000..7c9d0622c46 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe073.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_RMO_OPC/safe073.c b/regression/goto-instrument-wmm-core/ppc_safe073_RMO_OPC/safe073.c new file mode 100644 index 00000000000..96678d4f82c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_RMO_OPC/safe073.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe073_RMO_OPC/test.desc new file mode 100644 index 00000000000..54a423dc264 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe073.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_RMO_OPT/safe073.c b/regression/goto-instrument-wmm-core/ppc_safe073_RMO_OPT/safe073.c new file mode 100644 index 00000000000..96678d4f82c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_RMO_OPT/safe073.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe073_RMO_OPT/test.desc new file mode 100644 index 00000000000..d53507f016b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe073.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_SC_SAFE/safe073.c b/regression/goto-instrument-wmm-core/ppc_safe073_SC_SAFE/safe073.c new file mode 100644 index 00000000000..96678d4f82c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_SC_SAFE/safe073.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe073_SC_SAFE/test.desc new file mode 100644 index 00000000000..2a667925511 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe073.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_TSO_ALL/safe073.c b/regression/goto-instrument-wmm-core/ppc_safe073_TSO_ALL/safe073.c new file mode 100644 index 00000000000..96678d4f82c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_TSO_ALL/safe073.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe073_TSO_ALL/test.desc new file mode 100644 index 00000000000..42a15cf383f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe073.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_TSO_OPC/safe073.c b/regression/goto-instrument-wmm-core/ppc_safe073_TSO_OPC/safe073.c new file mode 100644 index 00000000000..96678d4f82c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_TSO_OPC/safe073.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe073_TSO_OPC/test.desc new file mode 100644 index 00000000000..0dcccb4d1a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe073.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_TSO_OPT/safe073.c b/regression/goto-instrument-wmm-core/ppc_safe073_TSO_OPT/safe073.c new file mode 100644 index 00000000000..96678d4f82c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_TSO_OPT/safe073.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe073_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe073_TSO_OPT/test.desc new file mode 100644 index 00000000000..7356f21d21c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe073_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe073.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_CAV11_ERROR/safe074.c b/regression/goto-instrument-wmm-core/ppc_safe074_CAV11_ERROR/safe074.c new file mode 100644 index 00000000000..6cc09a1c11e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_CAV11_ERROR/safe074.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe074_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..6df14d28eed --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe074.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_POWER_ALL/safe074.c b/regression/goto-instrument-wmm-core/ppc_safe074_POWER_ALL/safe074.c new file mode 100644 index 00000000000..6cc09a1c11e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_POWER_ALL/safe074.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe074_POWER_ALL/test.desc new file mode 100644 index 00000000000..00e8f5c1277 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe074.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_POWER_OPC/safe074.c b/regression/goto-instrument-wmm-core/ppc_safe074_POWER_OPC/safe074.c new file mode 100644 index 00000000000..6cc09a1c11e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_POWER_OPC/safe074.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe074_POWER_OPC/test.desc new file mode 100644 index 00000000000..1f3baecc81d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe074.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_POWER_OPT/safe074.c b/regression/goto-instrument-wmm-core/ppc_safe074_POWER_OPT/safe074.c new file mode 100644 index 00000000000..6cc09a1c11e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_POWER_OPT/safe074.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe074_POWER_OPT/test.desc new file mode 100644 index 00000000000..d4091e68d30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe074.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_PSO_ALL/safe074.c b/regression/goto-instrument-wmm-core/ppc_safe074_PSO_ALL/safe074.c new file mode 100644 index 00000000000..6cc09a1c11e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_PSO_ALL/safe074.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe074_PSO_ALL/test.desc new file mode 100644 index 00000000000..c16bc814ade --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe074.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_PSO_OPC/safe074.c b/regression/goto-instrument-wmm-core/ppc_safe074_PSO_OPC/safe074.c new file mode 100644 index 00000000000..6cc09a1c11e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_PSO_OPC/safe074.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe074_PSO_OPC/test.desc new file mode 100644 index 00000000000..276e21f67b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe074.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_PSO_OPT/safe074.c b/regression/goto-instrument-wmm-core/ppc_safe074_PSO_OPT/safe074.c new file mode 100644 index 00000000000..6cc09a1c11e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_PSO_OPT/safe074.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe074_PSO_OPT/test.desc new file mode 100644 index 00000000000..722171a0e46 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe074.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_RMO_ALL/safe074.c b/regression/goto-instrument-wmm-core/ppc_safe074_RMO_ALL/safe074.c new file mode 100644 index 00000000000..6cc09a1c11e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_RMO_ALL/safe074.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe074_RMO_ALL/test.desc new file mode 100644 index 00000000000..0f1ccbab9be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe074.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_RMO_OPC/safe074.c b/regression/goto-instrument-wmm-core/ppc_safe074_RMO_OPC/safe074.c new file mode 100644 index 00000000000..6cc09a1c11e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_RMO_OPC/safe074.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe074_RMO_OPC/test.desc new file mode 100644 index 00000000000..db1b4127d45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe074.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_RMO_OPT/safe074.c b/regression/goto-instrument-wmm-core/ppc_safe074_RMO_OPT/safe074.c new file mode 100644 index 00000000000..6cc09a1c11e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_RMO_OPT/safe074.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe074_RMO_OPT/test.desc new file mode 100644 index 00000000000..bab79485e50 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe074.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_SC_SAFE/safe074.c b/regression/goto-instrument-wmm-core/ppc_safe074_SC_SAFE/safe074.c new file mode 100644 index 00000000000..6cc09a1c11e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_SC_SAFE/safe074.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe074_SC_SAFE/test.desc new file mode 100644 index 00000000000..044c9c0fd56 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe074.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_TSO_ALL/safe074.c b/regression/goto-instrument-wmm-core/ppc_safe074_TSO_ALL/safe074.c new file mode 100644 index 00000000000..6cc09a1c11e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_TSO_ALL/safe074.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe074_TSO_ALL/test.desc new file mode 100644 index 00000000000..bf83e7473b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe074.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_TSO_OPC/safe074.c b/regression/goto-instrument-wmm-core/ppc_safe074_TSO_OPC/safe074.c new file mode 100644 index 00000000000..6cc09a1c11e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_TSO_OPC/safe074.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe074_TSO_OPC/test.desc new file mode 100644 index 00000000000..3a570975c4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe074.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_TSO_OPT/safe074.c b/regression/goto-instrument-wmm-core/ppc_safe074_TSO_OPT/safe074.c new file mode 100644 index 00000000000..6cc09a1c11e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_TSO_OPT/safe074.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe074_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe074_TSO_OPT/test.desc new file mode 100644 index 00000000000..1de7d2c14fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe074_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe074.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_CAV11_SAFE/safe075.c b/regression/goto-instrument-wmm-core/ppc_safe075_CAV11_SAFE/safe075.c new file mode 100644 index 00000000000..b2f1f0b1120 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_CAV11_SAFE/safe075.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe075_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..81f781f49e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe075.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_POWER_ALL/safe075.c b/regression/goto-instrument-wmm-core/ppc_safe075_POWER_ALL/safe075.c new file mode 100644 index 00000000000..b2f1f0b1120 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_POWER_ALL/safe075.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe075_POWER_ALL/test.desc new file mode 100644 index 00000000000..f52245ef34e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe075.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_POWER_OPC/safe075.c b/regression/goto-instrument-wmm-core/ppc_safe075_POWER_OPC/safe075.c new file mode 100644 index 00000000000..b2f1f0b1120 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_POWER_OPC/safe075.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe075_POWER_OPC/test.desc new file mode 100644 index 00000000000..54eec8b1a56 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe075.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe075_POWER_OPT/test.desc index d098fdf539f..d586e229bf3 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe075_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe075_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe075.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_PSO_ALL/safe075.c b/regression/goto-instrument-wmm-core/ppc_safe075_PSO_ALL/safe075.c new file mode 100644 index 00000000000..b2f1f0b1120 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_PSO_ALL/safe075.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe075_PSO_ALL/test.desc new file mode 100644 index 00000000000..030730a745c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe075.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_PSO_OPC/safe075.c b/regression/goto-instrument-wmm-core/ppc_safe075_PSO_OPC/safe075.c new file mode 100644 index 00000000000..b2f1f0b1120 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_PSO_OPC/safe075.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe075_PSO_OPC/test.desc new file mode 100644 index 00000000000..56c0125508b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe075.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_PSO_OPT/safe075.c b/regression/goto-instrument-wmm-core/ppc_safe075_PSO_OPT/safe075.c new file mode 100644 index 00000000000..b2f1f0b1120 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_PSO_OPT/safe075.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe075_PSO_OPT/test.desc new file mode 100644 index 00000000000..8ab73c8f6a0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe075.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_RMO_ALL/safe075.c b/regression/goto-instrument-wmm-core/ppc_safe075_RMO_ALL/safe075.c new file mode 100644 index 00000000000..b2f1f0b1120 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_RMO_ALL/safe075.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe075_RMO_ALL/test.desc new file mode 100644 index 00000000000..8b975f3ac08 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe075.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_RMO_OPC/safe075.c b/regression/goto-instrument-wmm-core/ppc_safe075_RMO_OPC/safe075.c new file mode 100644 index 00000000000..b2f1f0b1120 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_RMO_OPC/safe075.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe075_RMO_OPC/test.desc new file mode 100644 index 00000000000..54d005748d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe075.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_RMO_OPT/safe075.c b/regression/goto-instrument-wmm-core/ppc_safe075_RMO_OPT/safe075.c new file mode 100644 index 00000000000..b2f1f0b1120 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_RMO_OPT/safe075.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe075_RMO_OPT/test.desc new file mode 100644 index 00000000000..a76f17eaf84 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe075.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_SC_SAFE/safe075.c b/regression/goto-instrument-wmm-core/ppc_safe075_SC_SAFE/safe075.c new file mode 100644 index 00000000000..b2f1f0b1120 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_SC_SAFE/safe075.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe075_SC_SAFE/test.desc new file mode 100644 index 00000000000..189694d0114 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe075.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_TSO_ALL/safe075.c b/regression/goto-instrument-wmm-core/ppc_safe075_TSO_ALL/safe075.c new file mode 100644 index 00000000000..b2f1f0b1120 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_TSO_ALL/safe075.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe075_TSO_ALL/test.desc new file mode 100644 index 00000000000..cb9bdc058a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe075.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_TSO_OPC/safe075.c b/regression/goto-instrument-wmm-core/ppc_safe075_TSO_OPC/safe075.c new file mode 100644 index 00000000000..b2f1f0b1120 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_TSO_OPC/safe075.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe075_TSO_OPC/test.desc new file mode 100644 index 00000000000..29e6606b2cc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe075.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_TSO_OPT/safe075.c b/regression/goto-instrument-wmm-core/ppc_safe075_TSO_OPT/safe075.c new file mode 100644 index 00000000000..b2f1f0b1120 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_TSO_OPT/safe075.c @@ -0,0 +1,59 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = *(&y + __unbuffered_p1_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe075_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe075_TSO_OPT/test.desc new file mode 100644 index 00000000000..3a0921e447a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe075_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe075.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_CAV11_SAFE/safe076.c b/regression/goto-instrument-wmm-core/ppc_safe076_CAV11_SAFE/safe076.c new file mode 100644 index 00000000000..8802bdab124 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_CAV11_SAFE/safe076.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe076_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..5f352628a11 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe076.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_POWER_ALL/safe076.c b/regression/goto-instrument-wmm-core/ppc_safe076_POWER_ALL/safe076.c new file mode 100644 index 00000000000..8802bdab124 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_POWER_ALL/safe076.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe076_POWER_ALL/test.desc new file mode 100644 index 00000000000..ec368af6404 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe076.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_POWER_OPC/safe076.c b/regression/goto-instrument-wmm-core/ppc_safe076_POWER_OPC/safe076.c new file mode 100644 index 00000000000..8802bdab124 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_POWER_OPC/safe076.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe076_POWER_OPC/test.desc new file mode 100644 index 00000000000..14f546de768 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe076.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_POWER_OPT/safe076.c b/regression/goto-instrument-wmm-core/ppc_safe076_POWER_OPT/safe076.c new file mode 100644 index 00000000000..8802bdab124 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_POWER_OPT/safe076.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe076_POWER_OPT/test.desc new file mode 100644 index 00000000000..d3b7059f9cc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe076.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_PSO_ALL/safe076.c b/regression/goto-instrument-wmm-core/ppc_safe076_PSO_ALL/safe076.c new file mode 100644 index 00000000000..8802bdab124 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_PSO_ALL/safe076.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe076_PSO_ALL/test.desc new file mode 100644 index 00000000000..f3dbdb7270e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe076.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_PSO_OPC/safe076.c b/regression/goto-instrument-wmm-core/ppc_safe076_PSO_OPC/safe076.c new file mode 100644 index 00000000000..8802bdab124 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_PSO_OPC/safe076.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe076_PSO_OPC/test.desc new file mode 100644 index 00000000000..a089173e477 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe076.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_PSO_OPT/safe076.c b/regression/goto-instrument-wmm-core/ppc_safe076_PSO_OPT/safe076.c new file mode 100644 index 00000000000..8802bdab124 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_PSO_OPT/safe076.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe076_PSO_OPT/test.desc new file mode 100644 index 00000000000..9b1cb06064f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe076.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_RMO_ALL/safe076.c b/regression/goto-instrument-wmm-core/ppc_safe076_RMO_ALL/safe076.c new file mode 100644 index 00000000000..8802bdab124 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_RMO_ALL/safe076.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe076_RMO_ALL/test.desc new file mode 100644 index 00000000000..a024cb75690 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe076.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_RMO_OPC/safe076.c b/regression/goto-instrument-wmm-core/ppc_safe076_RMO_OPC/safe076.c new file mode 100644 index 00000000000..8802bdab124 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_RMO_OPC/safe076.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe076_RMO_OPC/test.desc new file mode 100644 index 00000000000..c5099034ba7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe076.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_RMO_OPT/safe076.c b/regression/goto-instrument-wmm-core/ppc_safe076_RMO_OPT/safe076.c new file mode 100644 index 00000000000..8802bdab124 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_RMO_OPT/safe076.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe076_RMO_OPT/test.desc new file mode 100644 index 00000000000..cdc676cfbae --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe076.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_SC_SAFE/safe076.c b/regression/goto-instrument-wmm-core/ppc_safe076_SC_SAFE/safe076.c new file mode 100644 index 00000000000..8802bdab124 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_SC_SAFE/safe076.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe076_SC_SAFE/test.desc new file mode 100644 index 00000000000..7c3126652ac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe076.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_TSO_ALL/safe076.c b/regression/goto-instrument-wmm-core/ppc_safe076_TSO_ALL/safe076.c new file mode 100644 index 00000000000..8802bdab124 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_TSO_ALL/safe076.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe076_TSO_ALL/test.desc new file mode 100644 index 00000000000..39f2fbe8aff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe076.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_TSO_OPC/safe076.c b/regression/goto-instrument-wmm-core/ppc_safe076_TSO_OPC/safe076.c new file mode 100644 index 00000000000..8802bdab124 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_TSO_OPC/safe076.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe076_TSO_OPC/test.desc new file mode 100644 index 00000000000..7ef74eb2816 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe076.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_TSO_OPT/safe076.c b/regression/goto-instrument-wmm-core/ppc_safe076_TSO_OPT/safe076.c new file mode 100644 index 00000000000..8802bdab124 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_TSO_OPT/safe076.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe076_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe076_TSO_OPT/test.desc new file mode 100644 index 00000000000..6cf372aaac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe076_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe076.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_CAV11_ERROR/safe077.c b/regression/goto-instrument-wmm-core/ppc_safe077_CAV11_ERROR/safe077.c new file mode 100644 index 00000000000..cd10ab3af45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_CAV11_ERROR/safe077.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe077_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..6cd00368ae3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe077.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_POWER_ALL/safe077.c b/regression/goto-instrument-wmm-core/ppc_safe077_POWER_ALL/safe077.c new file mode 100644 index 00000000000..cd10ab3af45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_POWER_ALL/safe077.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe077_POWER_ALL/test.desc new file mode 100644 index 00000000000..1893a212a50 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe077.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_POWER_OPC/safe077.c b/regression/goto-instrument-wmm-core/ppc_safe077_POWER_OPC/safe077.c new file mode 100644 index 00000000000..cd10ab3af45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_POWER_OPC/safe077.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe077_POWER_OPC/test.desc new file mode 100644 index 00000000000..7cb9067bcf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe077.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_POWER_OPT/safe077.c b/regression/goto-instrument-wmm-core/ppc_safe077_POWER_OPT/safe077.c new file mode 100644 index 00000000000..cd10ab3af45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_POWER_OPT/safe077.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe077_POWER_OPT/test.desc new file mode 100644 index 00000000000..2a3ae30a618 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe077.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_PSO_ALL/safe077.c b/regression/goto-instrument-wmm-core/ppc_safe077_PSO_ALL/safe077.c new file mode 100644 index 00000000000..cd10ab3af45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_PSO_ALL/safe077.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe077_PSO_ALL/test.desc new file mode 100644 index 00000000000..6b696b4589c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe077.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_PSO_OPC/safe077.c b/regression/goto-instrument-wmm-core/ppc_safe077_PSO_OPC/safe077.c new file mode 100644 index 00000000000..cd10ab3af45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_PSO_OPC/safe077.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe077_PSO_OPC/test.desc new file mode 100644 index 00000000000..5c604e7bd2c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe077.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_PSO_OPT/safe077.c b/regression/goto-instrument-wmm-core/ppc_safe077_PSO_OPT/safe077.c new file mode 100644 index 00000000000..cd10ab3af45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_PSO_OPT/safe077.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe077_PSO_OPT/test.desc new file mode 100644 index 00000000000..685c9fbf8f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe077.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_RMO_ALL/safe077.c b/regression/goto-instrument-wmm-core/ppc_safe077_RMO_ALL/safe077.c new file mode 100644 index 00000000000..cd10ab3af45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_RMO_ALL/safe077.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe077_RMO_ALL/test.desc new file mode 100644 index 00000000000..6564d9108c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe077.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_RMO_OPC/safe077.c b/regression/goto-instrument-wmm-core/ppc_safe077_RMO_OPC/safe077.c new file mode 100644 index 00000000000..cd10ab3af45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_RMO_OPC/safe077.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe077_RMO_OPC/test.desc new file mode 100644 index 00000000000..e5a963ad399 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe077.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_RMO_OPT/safe077.c b/regression/goto-instrument-wmm-core/ppc_safe077_RMO_OPT/safe077.c new file mode 100644 index 00000000000..cd10ab3af45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_RMO_OPT/safe077.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe077_RMO_OPT/test.desc new file mode 100644 index 00000000000..9aa28b03027 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe077.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_SC_SAFE/safe077.c b/regression/goto-instrument-wmm-core/ppc_safe077_SC_SAFE/safe077.c new file mode 100644 index 00000000000..cd10ab3af45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_SC_SAFE/safe077.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe077_SC_SAFE/test.desc new file mode 100644 index 00000000000..13c170526fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe077.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_TSO_ALL/safe077.c b/regression/goto-instrument-wmm-core/ppc_safe077_TSO_ALL/safe077.c new file mode 100644 index 00000000000..cd10ab3af45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_TSO_ALL/safe077.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe077_TSO_ALL/test.desc new file mode 100644 index 00000000000..5584b9de607 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe077.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_TSO_OPC/safe077.c b/regression/goto-instrument-wmm-core/ppc_safe077_TSO_OPC/safe077.c new file mode 100644 index 00000000000..cd10ab3af45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_TSO_OPC/safe077.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe077_TSO_OPC/test.desc new file mode 100644 index 00000000000..7cc511e6c8f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe077.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_TSO_OPT/safe077.c b/regression/goto-instrument-wmm-core/ppc_safe077_TSO_OPT/safe077.c new file mode 100644 index 00000000000..cd10ab3af45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_TSO_OPT/safe077.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe077_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe077_TSO_OPT/test.desc new file mode 100644 index 00000000000..b4ff386f864 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe077_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe077.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_CAV11_SAFE/safe078.c b/regression/goto-instrument-wmm-core/ppc_safe078_CAV11_SAFE/safe078.c new file mode 100644 index 00000000000..79ef7a60bb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_CAV11_SAFE/safe078.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe078_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..881ed4288e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe078.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_POWER_ALL/safe078.c b/regression/goto-instrument-wmm-core/ppc_safe078_POWER_ALL/safe078.c new file mode 100644 index 00000000000..79ef7a60bb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_POWER_ALL/safe078.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe078_POWER_ALL/test.desc new file mode 100644 index 00000000000..5fa5c4dd984 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe078.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_POWER_OPC/safe078.c b/regression/goto-instrument-wmm-core/ppc_safe078_POWER_OPC/safe078.c new file mode 100644 index 00000000000..79ef7a60bb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_POWER_OPC/safe078.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe078_POWER_OPC/test.desc new file mode 100644 index 00000000000..b382a5a530f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe078.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe078_POWER_OPT/test.desc index 785b07555a7..219bb6a72f1 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe078_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe078_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe078.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_PSO_ALL/safe078.c b/regression/goto-instrument-wmm-core/ppc_safe078_PSO_ALL/safe078.c new file mode 100644 index 00000000000..79ef7a60bb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_PSO_ALL/safe078.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe078_PSO_ALL/test.desc new file mode 100644 index 00000000000..fee973104ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe078.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_PSO_OPC/safe078.c b/regression/goto-instrument-wmm-core/ppc_safe078_PSO_OPC/safe078.c new file mode 100644 index 00000000000..79ef7a60bb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_PSO_OPC/safe078.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe078_PSO_OPC/test.desc new file mode 100644 index 00000000000..12cf7fb4655 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe078.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_PSO_OPT/safe078.c b/regression/goto-instrument-wmm-core/ppc_safe078_PSO_OPT/safe078.c new file mode 100644 index 00000000000..79ef7a60bb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_PSO_OPT/safe078.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe078_PSO_OPT/test.desc new file mode 100644 index 00000000000..35eac394043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe078.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_RMO_ALL/safe078.c b/regression/goto-instrument-wmm-core/ppc_safe078_RMO_ALL/safe078.c new file mode 100644 index 00000000000..79ef7a60bb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_RMO_ALL/safe078.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe078_RMO_ALL/test.desc new file mode 100644 index 00000000000..92c67235dee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe078.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_RMO_OPC/safe078.c b/regression/goto-instrument-wmm-core/ppc_safe078_RMO_OPC/safe078.c new file mode 100644 index 00000000000..79ef7a60bb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_RMO_OPC/safe078.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe078_RMO_OPC/test.desc new file mode 100644 index 00000000000..a57d9a7a113 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe078.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_RMO_OPT/safe078.c b/regression/goto-instrument-wmm-core/ppc_safe078_RMO_OPT/safe078.c new file mode 100644 index 00000000000..79ef7a60bb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_RMO_OPT/safe078.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe078_RMO_OPT/test.desc new file mode 100644 index 00000000000..11d07888c74 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe078.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_SC_SAFE/safe078.c b/regression/goto-instrument-wmm-core/ppc_safe078_SC_SAFE/safe078.c new file mode 100644 index 00000000000..79ef7a60bb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_SC_SAFE/safe078.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe078_SC_SAFE/test.desc new file mode 100644 index 00000000000..a1f44fb837b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe078.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_TSO_ALL/safe078.c b/regression/goto-instrument-wmm-core/ppc_safe078_TSO_ALL/safe078.c new file mode 100644 index 00000000000..79ef7a60bb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_TSO_ALL/safe078.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe078_TSO_ALL/test.desc new file mode 100644 index 00000000000..b9cbb235491 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe078.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_TSO_OPC/safe078.c b/regression/goto-instrument-wmm-core/ppc_safe078_TSO_OPC/safe078.c new file mode 100644 index 00000000000..79ef7a60bb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_TSO_OPC/safe078.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe078_TSO_OPC/test.desc new file mode 100644 index 00000000000..d997ab2e881 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe078.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_TSO_OPT/safe078.c b/regression/goto-instrument-wmm-core/ppc_safe078_TSO_OPT/safe078.c new file mode 100644 index 00000000000..79ef7a60bb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_TSO_OPT/safe078.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe078_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe078_TSO_OPT/test.desc new file mode 100644 index 00000000000..9d35a11bec5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe078_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe078.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_CAV11_SAFE/safe079.c b/regression/goto-instrument-wmm-core/ppc_safe079_CAV11_SAFE/safe079.c new file mode 100644 index 00000000000..0e9462e90eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_CAV11_SAFE/safe079.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe079_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..6f4671b2a46 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe079.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_POWER_ALL/safe079.c b/regression/goto-instrument-wmm-core/ppc_safe079_POWER_ALL/safe079.c new file mode 100644 index 00000000000..0e9462e90eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_POWER_ALL/safe079.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe079_POWER_ALL/test.desc new file mode 100644 index 00000000000..fa522d58502 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe079.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_POWER_OPC/safe079.c b/regression/goto-instrument-wmm-core/ppc_safe079_POWER_OPC/safe079.c new file mode 100644 index 00000000000..0e9462e90eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_POWER_OPC/safe079.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe079_POWER_OPC/test.desc new file mode 100644 index 00000000000..a400adc5bbd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe079.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_POWER_OPT/safe079.c b/regression/goto-instrument-wmm-core/ppc_safe079_POWER_OPT/safe079.c new file mode 100644 index 00000000000..0e9462e90eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_POWER_OPT/safe079.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe079_POWER_OPT/test.desc new file mode 100644 index 00000000000..c4869c3f6da --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe079.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_PSO_ALL/safe079.c b/regression/goto-instrument-wmm-core/ppc_safe079_PSO_ALL/safe079.c new file mode 100644 index 00000000000..0e9462e90eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_PSO_ALL/safe079.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe079_PSO_ALL/test.desc new file mode 100644 index 00000000000..ed0e5b8b81a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe079.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_PSO_OPC/safe079.c b/regression/goto-instrument-wmm-core/ppc_safe079_PSO_OPC/safe079.c new file mode 100644 index 00000000000..0e9462e90eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_PSO_OPC/safe079.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe079_PSO_OPC/test.desc new file mode 100644 index 00000000000..0881a06b468 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe079.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_PSO_OPT/safe079.c b/regression/goto-instrument-wmm-core/ppc_safe079_PSO_OPT/safe079.c new file mode 100644 index 00000000000..0e9462e90eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_PSO_OPT/safe079.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe079_PSO_OPT/test.desc new file mode 100644 index 00000000000..8dae57f60d5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe079.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_RMO_ALL/safe079.c b/regression/goto-instrument-wmm-core/ppc_safe079_RMO_ALL/safe079.c new file mode 100644 index 00000000000..0e9462e90eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_RMO_ALL/safe079.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe079_RMO_ALL/test.desc new file mode 100644 index 00000000000..5b2bca54b32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe079.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_RMO_OPC/safe079.c b/regression/goto-instrument-wmm-core/ppc_safe079_RMO_OPC/safe079.c new file mode 100644 index 00000000000..0e9462e90eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_RMO_OPC/safe079.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe079_RMO_OPC/test.desc new file mode 100644 index 00000000000..d213741bbd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe079.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_RMO_OPT/safe079.c b/regression/goto-instrument-wmm-core/ppc_safe079_RMO_OPT/safe079.c new file mode 100644 index 00000000000..0e9462e90eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_RMO_OPT/safe079.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe079_RMO_OPT/test.desc new file mode 100644 index 00000000000..fa9647c7d64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe079.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_SC_SAFE/safe079.c b/regression/goto-instrument-wmm-core/ppc_safe079_SC_SAFE/safe079.c new file mode 100644 index 00000000000..0e9462e90eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_SC_SAFE/safe079.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe079_SC_SAFE/test.desc new file mode 100644 index 00000000000..959c6872680 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe079.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_TSO_ALL/safe079.c b/regression/goto-instrument-wmm-core/ppc_safe079_TSO_ALL/safe079.c new file mode 100644 index 00000000000..0e9462e90eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_TSO_ALL/safe079.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe079_TSO_ALL/test.desc new file mode 100644 index 00000000000..9c975dbf48d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe079.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_TSO_OPC/safe079.c b/regression/goto-instrument-wmm-core/ppc_safe079_TSO_OPC/safe079.c new file mode 100644 index 00000000000..0e9462e90eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_TSO_OPC/safe079.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe079_TSO_OPC/test.desc new file mode 100644 index 00000000000..5aa60a05147 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe079.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_TSO_OPT/safe079.c b/regression/goto-instrument-wmm-core/ppc_safe079_TSO_OPT/safe079.c new file mode 100644 index 00000000000..0e9462e90eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_TSO_OPT/safe079.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&z + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe079_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe079_TSO_OPT/test.desc new file mode 100644 index 00000000000..d2a3118ce6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe079_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe079.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_CAV11_ERROR/safe080.c b/regression/goto-instrument-wmm-core/ppc_safe080_CAV11_ERROR/safe080.c new file mode 100644 index 00000000000..594450d273c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_CAV11_ERROR/safe080.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe080_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..027d76bb873 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe080.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_POWER_ALL/safe080.c b/regression/goto-instrument-wmm-core/ppc_safe080_POWER_ALL/safe080.c new file mode 100644 index 00000000000..594450d273c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_POWER_ALL/safe080.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe080_POWER_ALL/test.desc new file mode 100644 index 00000000000..835ac2b416c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe080.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_POWER_OPC/safe080.c b/regression/goto-instrument-wmm-core/ppc_safe080_POWER_OPC/safe080.c new file mode 100644 index 00000000000..594450d273c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_POWER_OPC/safe080.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe080_POWER_OPC/test.desc new file mode 100644 index 00000000000..8ccdb515d6d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe080.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_POWER_OPT/safe080.c b/regression/goto-instrument-wmm-core/ppc_safe080_POWER_OPT/safe080.c new file mode 100644 index 00000000000..594450d273c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_POWER_OPT/safe080.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe080_POWER_OPT/test.desc new file mode 100644 index 00000000000..8ec5484ecd9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe080.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_PSO_ALL/safe080.c b/regression/goto-instrument-wmm-core/ppc_safe080_PSO_ALL/safe080.c new file mode 100644 index 00000000000..594450d273c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_PSO_ALL/safe080.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe080_PSO_ALL/test.desc new file mode 100644 index 00000000000..92404dc6c42 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe080.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_PSO_OPC/safe080.c b/regression/goto-instrument-wmm-core/ppc_safe080_PSO_OPC/safe080.c new file mode 100644 index 00000000000..594450d273c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_PSO_OPC/safe080.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe080_PSO_OPC/test.desc new file mode 100644 index 00000000000..eb768be6e6d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe080.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_PSO_OPT/safe080.c b/regression/goto-instrument-wmm-core/ppc_safe080_PSO_OPT/safe080.c new file mode 100644 index 00000000000..594450d273c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_PSO_OPT/safe080.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe080_PSO_OPT/test.desc new file mode 100644 index 00000000000..5ca442bd486 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe080.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_RMO_ALL/safe080.c b/regression/goto-instrument-wmm-core/ppc_safe080_RMO_ALL/safe080.c new file mode 100644 index 00000000000..594450d273c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_RMO_ALL/safe080.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe080_RMO_ALL/test.desc new file mode 100644 index 00000000000..ddbaa9c8c64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe080.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_RMO_OPC/safe080.c b/regression/goto-instrument-wmm-core/ppc_safe080_RMO_OPC/safe080.c new file mode 100644 index 00000000000..594450d273c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_RMO_OPC/safe080.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe080_RMO_OPC/test.desc new file mode 100644 index 00000000000..e35efc6a120 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe080.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_RMO_OPT/safe080.c b/regression/goto-instrument-wmm-core/ppc_safe080_RMO_OPT/safe080.c new file mode 100644 index 00000000000..594450d273c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_RMO_OPT/safe080.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe080_RMO_OPT/test.desc new file mode 100644 index 00000000000..ea4f4ea4400 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe080.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_SC_SAFE/safe080.c b/regression/goto-instrument-wmm-core/ppc_safe080_SC_SAFE/safe080.c new file mode 100644 index 00000000000..594450d273c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_SC_SAFE/safe080.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe080_SC_SAFE/test.desc new file mode 100644 index 00000000000..f8f3238f9d3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe080.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_TSO_ALL/safe080.c b/regression/goto-instrument-wmm-core/ppc_safe080_TSO_ALL/safe080.c new file mode 100644 index 00000000000..594450d273c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_TSO_ALL/safe080.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe080_TSO_ALL/test.desc new file mode 100644 index 00000000000..bd94fc01bc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe080.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_TSO_OPC/safe080.c b/regression/goto-instrument-wmm-core/ppc_safe080_TSO_OPC/safe080.c new file mode 100644 index 00000000000..594450d273c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_TSO_OPC/safe080.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe080_TSO_OPC/test.desc new file mode 100644 index 00000000000..e83abf8f066 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe080.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_TSO_OPT/safe080.c b/regression/goto-instrument-wmm-core/ppc_safe080_TSO_OPT/safe080.c new file mode 100644 index 00000000000..594450d273c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_TSO_OPT/safe080.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 0 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe080_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe080_TSO_OPT/test.desc new file mode 100644 index 00000000000..68a88f6a27d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe080_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe080.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_CAV11_ERROR/safe081.c b/regression/goto-instrument-wmm-core/ppc_safe081_CAV11_ERROR/safe081.c new file mode 100644 index 00000000000..a4e10dfd871 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_CAV11_ERROR/safe081.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe081_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..d3eaa98a95b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe081.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_POWER_ALL/safe081.c b/regression/goto-instrument-wmm-core/ppc_safe081_POWER_ALL/safe081.c new file mode 100644 index 00000000000..a4e10dfd871 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_POWER_ALL/safe081.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe081_POWER_ALL/test.desc new file mode 100644 index 00000000000..8c7ab2d63e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe081.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_POWER_OPC/safe081.c b/regression/goto-instrument-wmm-core/ppc_safe081_POWER_OPC/safe081.c new file mode 100644 index 00000000000..a4e10dfd871 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_POWER_OPC/safe081.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe081_POWER_OPC/test.desc new file mode 100644 index 00000000000..85c4804acdc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe081.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe081_POWER_OPT/test.desc index 61dcc399234..c7150f897ba 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe081_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe081_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe081.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_PSO_ALL/safe081.c b/regression/goto-instrument-wmm-core/ppc_safe081_PSO_ALL/safe081.c new file mode 100644 index 00000000000..a4e10dfd871 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_PSO_ALL/safe081.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe081_PSO_ALL/test.desc new file mode 100644 index 00000000000..9721bc06def --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe081.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_PSO_OPC/safe081.c b/regression/goto-instrument-wmm-core/ppc_safe081_PSO_OPC/safe081.c new file mode 100644 index 00000000000..a4e10dfd871 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_PSO_OPC/safe081.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe081_PSO_OPC/test.desc new file mode 100644 index 00000000000..92e03da6928 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe081.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_PSO_OPT/safe081.c b/regression/goto-instrument-wmm-core/ppc_safe081_PSO_OPT/safe081.c new file mode 100644 index 00000000000..a4e10dfd871 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_PSO_OPT/safe081.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe081_PSO_OPT/test.desc new file mode 100644 index 00000000000..07a839fd3e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe081.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_RMO_ALL/safe081.c b/regression/goto-instrument-wmm-core/ppc_safe081_RMO_ALL/safe081.c new file mode 100644 index 00000000000..a4e10dfd871 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_RMO_ALL/safe081.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe081_RMO_ALL/test.desc new file mode 100644 index 00000000000..e4a5748bfff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe081.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_RMO_OPC/safe081.c b/regression/goto-instrument-wmm-core/ppc_safe081_RMO_OPC/safe081.c new file mode 100644 index 00000000000..a4e10dfd871 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_RMO_OPC/safe081.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe081_RMO_OPC/test.desc new file mode 100644 index 00000000000..299baacd55a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe081.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_RMO_OPT/safe081.c b/regression/goto-instrument-wmm-core/ppc_safe081_RMO_OPT/safe081.c new file mode 100644 index 00000000000..a4e10dfd871 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_RMO_OPT/safe081.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe081_RMO_OPT/test.desc new file mode 100644 index 00000000000..520a81e2a72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe081.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_SC_SAFE/safe081.c b/regression/goto-instrument-wmm-core/ppc_safe081_SC_SAFE/safe081.c new file mode 100644 index 00000000000..a4e10dfd871 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_SC_SAFE/safe081.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe081_SC_SAFE/test.desc new file mode 100644 index 00000000000..3911b7a2db0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe081.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_TSO_ALL/safe081.c b/regression/goto-instrument-wmm-core/ppc_safe081_TSO_ALL/safe081.c new file mode 100644 index 00000000000..a4e10dfd871 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_TSO_ALL/safe081.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe081_TSO_ALL/test.desc new file mode 100644 index 00000000000..1c0232da3c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe081.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_TSO_OPC/safe081.c b/regression/goto-instrument-wmm-core/ppc_safe081_TSO_OPC/safe081.c new file mode 100644 index 00000000000..a4e10dfd871 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_TSO_OPC/safe081.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe081_TSO_OPC/test.desc new file mode 100644 index 00000000000..d6a6851c531 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe081.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_TSO_OPT/safe081.c b/regression/goto-instrument-wmm-core/ppc_safe081_TSO_OPT/safe081.c new file mode 100644 index 00000000000..a4e10dfd871 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_TSO_OPT/safe081.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = *(&y + __unbuffered_p2_r3); + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r4 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe081_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe081_TSO_OPT/test.desc new file mode 100644 index 00000000000..f07eb8f6d28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe081_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe081.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_CAV11_SAFE/safe082.c b/regression/goto-instrument-wmm-core/ppc_safe082_CAV11_SAFE/safe082.c new file mode 100644 index 00000000000..3a15ef56c81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_CAV11_SAFE/safe082.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe082_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..d2063cd0e46 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe082.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_POWER_ALL/safe082.c b/regression/goto-instrument-wmm-core/ppc_safe082_POWER_ALL/safe082.c new file mode 100644 index 00000000000..3a15ef56c81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_POWER_ALL/safe082.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe082_POWER_ALL/test.desc new file mode 100644 index 00000000000..05e9e7dc2cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe082.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_POWER_OPC/safe082.c b/regression/goto-instrument-wmm-core/ppc_safe082_POWER_OPC/safe082.c new file mode 100644 index 00000000000..3a15ef56c81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_POWER_OPC/safe082.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe082_POWER_OPC/test.desc new file mode 100644 index 00000000000..f0992c91e41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe082.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_POWER_OPT/safe082.c b/regression/goto-instrument-wmm-core/ppc_safe082_POWER_OPT/safe082.c new file mode 100644 index 00000000000..3a15ef56c81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_POWER_OPT/safe082.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe082_POWER_OPT/test.desc new file mode 100644 index 00000000000..6036a44b070 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe082.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_PSO_ALL/safe082.c b/regression/goto-instrument-wmm-core/ppc_safe082_PSO_ALL/safe082.c new file mode 100644 index 00000000000..3a15ef56c81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_PSO_ALL/safe082.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe082_PSO_ALL/test.desc new file mode 100644 index 00000000000..a3b856878f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe082.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_PSO_OPC/safe082.c b/regression/goto-instrument-wmm-core/ppc_safe082_PSO_OPC/safe082.c new file mode 100644 index 00000000000..3a15ef56c81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_PSO_OPC/safe082.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe082_PSO_OPC/test.desc new file mode 100644 index 00000000000..5bc55e22e6d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe082.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_PSO_OPT/safe082.c b/regression/goto-instrument-wmm-core/ppc_safe082_PSO_OPT/safe082.c new file mode 100644 index 00000000000..3a15ef56c81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_PSO_OPT/safe082.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe082_PSO_OPT/test.desc new file mode 100644 index 00000000000..2a5b8a25b28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe082.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_RMO_ALL/safe082.c b/regression/goto-instrument-wmm-core/ppc_safe082_RMO_ALL/safe082.c new file mode 100644 index 00000000000..3a15ef56c81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_RMO_ALL/safe082.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe082_RMO_ALL/test.desc new file mode 100644 index 00000000000..ee496af746f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe082.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_RMO_OPC/safe082.c b/regression/goto-instrument-wmm-core/ppc_safe082_RMO_OPC/safe082.c new file mode 100644 index 00000000000..3a15ef56c81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_RMO_OPC/safe082.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe082_RMO_OPC/test.desc new file mode 100644 index 00000000000..fc39ddf8301 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe082.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_RMO_OPT/safe082.c b/regression/goto-instrument-wmm-core/ppc_safe082_RMO_OPT/safe082.c new file mode 100644 index 00000000000..3a15ef56c81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_RMO_OPT/safe082.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe082_RMO_OPT/test.desc new file mode 100644 index 00000000000..fd82cdf6b26 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe082.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_SC_SAFE/safe082.c b/regression/goto-instrument-wmm-core/ppc_safe082_SC_SAFE/safe082.c new file mode 100644 index 00000000000..3a15ef56c81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_SC_SAFE/safe082.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe082_SC_SAFE/test.desc new file mode 100644 index 00000000000..d74a6c42eaa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe082.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_TSO_ALL/safe082.c b/regression/goto-instrument-wmm-core/ppc_safe082_TSO_ALL/safe082.c new file mode 100644 index 00000000000..3a15ef56c81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_TSO_ALL/safe082.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe082_TSO_ALL/test.desc new file mode 100644 index 00000000000..6878e8126c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe082.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_TSO_OPC/safe082.c b/regression/goto-instrument-wmm-core/ppc_safe082_TSO_OPC/safe082.c new file mode 100644 index 00000000000..3a15ef56c81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_TSO_OPC/safe082.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe082_TSO_OPC/test.desc new file mode 100644 index 00000000000..5b8e03b3022 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe082.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_TSO_OPT/safe082.c b/regression/goto-instrument-wmm-core/ppc_safe082_TSO_OPT/safe082.c new file mode 100644 index 00000000000..3a15ef56c81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_TSO_OPT/safe082.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe082_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe082_TSO_OPT/test.desc new file mode 100644 index 00000000000..ee49d8fc5c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe082_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe082.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_CAV11_SAFE/safe083.c b/regression/goto-instrument-wmm-core/ppc_safe083_CAV11_SAFE/safe083.c new file mode 100644 index 00000000000..4fd25cedc36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_CAV11_SAFE/safe083.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe083_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..33759eab1ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe083.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_POWER_ALL/safe083.c b/regression/goto-instrument-wmm-core/ppc_safe083_POWER_ALL/safe083.c new file mode 100644 index 00000000000..4fd25cedc36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_POWER_ALL/safe083.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe083_POWER_ALL/test.desc new file mode 100644 index 00000000000..d77695b33f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe083.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_POWER_OPC/safe083.c b/regression/goto-instrument-wmm-core/ppc_safe083_POWER_OPC/safe083.c new file mode 100644 index 00000000000..4fd25cedc36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_POWER_OPC/safe083.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe083_POWER_OPC/test.desc new file mode 100644 index 00000000000..91652032694 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe083.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_POWER_OPT/safe083.c b/regression/goto-instrument-wmm-core/ppc_safe083_POWER_OPT/safe083.c new file mode 100644 index 00000000000..4fd25cedc36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_POWER_OPT/safe083.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe083_POWER_OPT/test.desc new file mode 100644 index 00000000000..def672a3a09 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe083.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_PSO_ALL/safe083.c b/regression/goto-instrument-wmm-core/ppc_safe083_PSO_ALL/safe083.c new file mode 100644 index 00000000000..4fd25cedc36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_PSO_ALL/safe083.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe083_PSO_ALL/test.desc new file mode 100644 index 00000000000..de9d98b7519 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe083.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_PSO_OPC/safe083.c b/regression/goto-instrument-wmm-core/ppc_safe083_PSO_OPC/safe083.c new file mode 100644 index 00000000000..4fd25cedc36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_PSO_OPC/safe083.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe083_PSO_OPC/test.desc new file mode 100644 index 00000000000..29e2e0fcbf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe083.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_PSO_OPT/safe083.c b/regression/goto-instrument-wmm-core/ppc_safe083_PSO_OPT/safe083.c new file mode 100644 index 00000000000..4fd25cedc36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_PSO_OPT/safe083.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe083_PSO_OPT/test.desc new file mode 100644 index 00000000000..3f4efd3cf86 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe083.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_RMO_ALL/safe083.c b/regression/goto-instrument-wmm-core/ppc_safe083_RMO_ALL/safe083.c new file mode 100644 index 00000000000..4fd25cedc36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_RMO_ALL/safe083.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe083_RMO_ALL/test.desc new file mode 100644 index 00000000000..d840332091f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe083.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_RMO_OPC/safe083.c b/regression/goto-instrument-wmm-core/ppc_safe083_RMO_OPC/safe083.c new file mode 100644 index 00000000000..4fd25cedc36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_RMO_OPC/safe083.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe083_RMO_OPC/test.desc new file mode 100644 index 00000000000..bca9cad37cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe083.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_RMO_OPT/safe083.c b/regression/goto-instrument-wmm-core/ppc_safe083_RMO_OPT/safe083.c new file mode 100644 index 00000000000..4fd25cedc36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_RMO_OPT/safe083.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe083_RMO_OPT/test.desc new file mode 100644 index 00000000000..1b94af0ea9c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe083.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_SC_SAFE/safe083.c b/regression/goto-instrument-wmm-core/ppc_safe083_SC_SAFE/safe083.c new file mode 100644 index 00000000000..4fd25cedc36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_SC_SAFE/safe083.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe083_SC_SAFE/test.desc new file mode 100644 index 00000000000..8a973cb714e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe083.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_TSO_ALL/safe083.c b/regression/goto-instrument-wmm-core/ppc_safe083_TSO_ALL/safe083.c new file mode 100644 index 00000000000..4fd25cedc36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_TSO_ALL/safe083.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe083_TSO_ALL/test.desc new file mode 100644 index 00000000000..e4c74060bf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe083.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_TSO_OPC/safe083.c b/regression/goto-instrument-wmm-core/ppc_safe083_TSO_OPC/safe083.c new file mode 100644 index 00000000000..4fd25cedc36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_TSO_OPC/safe083.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe083_TSO_OPC/test.desc new file mode 100644 index 00000000000..267916da21e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe083.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_TSO_OPT/safe083.c b/regression/goto-instrument-wmm-core/ppc_safe083_TSO_OPT/safe083.c new file mode 100644 index 00000000000..4fd25cedc36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_TSO_OPT/safe083.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 1; + x = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r3 == 0 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe083_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe083_TSO_OPT/test.desc new file mode 100644 index 00000000000..2f0f67ee14b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe083_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe083.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_CAV11_ERROR/safe084.c b/regression/goto-instrument-wmm-core/ppc_safe084_CAV11_ERROR/safe084.c new file mode 100644 index 00000000000..06fb2a56f7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_CAV11_ERROR/safe084.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe084_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..b4bbb12fd93 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe084.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_POWER_ALL/safe084.c b/regression/goto-instrument-wmm-core/ppc_safe084_POWER_ALL/safe084.c new file mode 100644 index 00000000000..06fb2a56f7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_POWER_ALL/safe084.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe084_POWER_ALL/test.desc new file mode 100644 index 00000000000..2ff1638ac71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe084.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_POWER_OPC/safe084.c b/regression/goto-instrument-wmm-core/ppc_safe084_POWER_OPC/safe084.c new file mode 100644 index 00000000000..06fb2a56f7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_POWER_OPC/safe084.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe084_POWER_OPC/test.desc new file mode 100644 index 00000000000..5cf15533292 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe084.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_POWER_OPT/safe084.c b/regression/goto-instrument-wmm-core/ppc_safe084_POWER_OPT/safe084.c new file mode 100644 index 00000000000..06fb2a56f7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_POWER_OPT/safe084.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe084_POWER_OPT/test.desc new file mode 100644 index 00000000000..886986a14ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe084.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_PSO_ALL/safe084.c b/regression/goto-instrument-wmm-core/ppc_safe084_PSO_ALL/safe084.c new file mode 100644 index 00000000000..06fb2a56f7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_PSO_ALL/safe084.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe084_PSO_ALL/test.desc new file mode 100644 index 00000000000..b08ef5e3d4a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe084.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_PSO_OPC/safe084.c b/regression/goto-instrument-wmm-core/ppc_safe084_PSO_OPC/safe084.c new file mode 100644 index 00000000000..06fb2a56f7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_PSO_OPC/safe084.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe084_PSO_OPC/test.desc new file mode 100644 index 00000000000..81d9649cf50 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe084.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_PSO_OPT/safe084.c b/regression/goto-instrument-wmm-core/ppc_safe084_PSO_OPT/safe084.c new file mode 100644 index 00000000000..06fb2a56f7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_PSO_OPT/safe084.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe084_PSO_OPT/test.desc new file mode 100644 index 00000000000..319f06bfe19 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe084.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_RMO_ALL/safe084.c b/regression/goto-instrument-wmm-core/ppc_safe084_RMO_ALL/safe084.c new file mode 100644 index 00000000000..06fb2a56f7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_RMO_ALL/safe084.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe084_RMO_ALL/test.desc new file mode 100644 index 00000000000..7d08fb238ad --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe084.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_RMO_OPC/safe084.c b/regression/goto-instrument-wmm-core/ppc_safe084_RMO_OPC/safe084.c new file mode 100644 index 00000000000..06fb2a56f7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_RMO_OPC/safe084.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe084_RMO_OPC/test.desc new file mode 100644 index 00000000000..3a7c0eea532 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe084.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_RMO_OPT/safe084.c b/regression/goto-instrument-wmm-core/ppc_safe084_RMO_OPT/safe084.c new file mode 100644 index 00000000000..06fb2a56f7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_RMO_OPT/safe084.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe084_RMO_OPT/test.desc new file mode 100644 index 00000000000..9efc59b2792 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe084.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_SC_SAFE/safe084.c b/regression/goto-instrument-wmm-core/ppc_safe084_SC_SAFE/safe084.c new file mode 100644 index 00000000000..06fb2a56f7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_SC_SAFE/safe084.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe084_SC_SAFE/test.desc new file mode 100644 index 00000000000..e54b516c10c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe084.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_TSO_ALL/safe084.c b/regression/goto-instrument-wmm-core/ppc_safe084_TSO_ALL/safe084.c new file mode 100644 index 00000000000..06fb2a56f7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_TSO_ALL/safe084.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe084_TSO_ALL/test.desc new file mode 100644 index 00000000000..1159311fffb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe084.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_TSO_OPC/safe084.c b/regression/goto-instrument-wmm-core/ppc_safe084_TSO_OPC/safe084.c new file mode 100644 index 00000000000..06fb2a56f7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_TSO_OPC/safe084.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe084_TSO_OPC/test.desc new file mode 100644 index 00000000000..3a5d77e77cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe084.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_TSO_OPT/safe084.c b/regression/goto-instrument-wmm-core/ppc_safe084_TSO_OPT/safe084.c new file mode 100644 index 00000000000..06fb2a56f7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_TSO_OPT/safe084.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe084_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe084_TSO_OPT/test.desc new file mode 100644 index 00000000000..458ff4017f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe084_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe084.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_CAV11_SAFE/safe085.c b/regression/goto-instrument-wmm-core/ppc_safe085_CAV11_SAFE/safe085.c new file mode 100644 index 00000000000..d5c2c54afcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_CAV11_SAFE/safe085.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe085_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..e84344d39c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe085.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_POWER_ALL/safe085.c b/regression/goto-instrument-wmm-core/ppc_safe085_POWER_ALL/safe085.c new file mode 100644 index 00000000000..d5c2c54afcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_POWER_ALL/safe085.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe085_POWER_ALL/test.desc new file mode 100644 index 00000000000..1afde28e83d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe085.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_POWER_OPC/safe085.c b/regression/goto-instrument-wmm-core/ppc_safe085_POWER_OPC/safe085.c new file mode 100644 index 00000000000..d5c2c54afcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_POWER_OPC/safe085.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe085_POWER_OPC/test.desc new file mode 100644 index 00000000000..372d2c4e113 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe085.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_POWER_OPT/safe085.c b/regression/goto-instrument-wmm-core/ppc_safe085_POWER_OPT/safe085.c new file mode 100644 index 00000000000..d5c2c54afcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_POWER_OPT/safe085.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe085_POWER_OPT/test.desc new file mode 100644 index 00000000000..ae53710856a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe085.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_PSO_ALL/safe085.c b/regression/goto-instrument-wmm-core/ppc_safe085_PSO_ALL/safe085.c new file mode 100644 index 00000000000..d5c2c54afcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_PSO_ALL/safe085.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe085_PSO_ALL/test.desc new file mode 100644 index 00000000000..b1c8437a75f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe085.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_PSO_OPC/safe085.c b/regression/goto-instrument-wmm-core/ppc_safe085_PSO_OPC/safe085.c new file mode 100644 index 00000000000..d5c2c54afcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_PSO_OPC/safe085.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe085_PSO_OPC/test.desc new file mode 100644 index 00000000000..4d7632621b6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe085.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_PSO_OPT/safe085.c b/regression/goto-instrument-wmm-core/ppc_safe085_PSO_OPT/safe085.c new file mode 100644 index 00000000000..d5c2c54afcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_PSO_OPT/safe085.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe085_PSO_OPT/test.desc new file mode 100644 index 00000000000..51eb7e36bdd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe085.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_RMO_ALL/safe085.c b/regression/goto-instrument-wmm-core/ppc_safe085_RMO_ALL/safe085.c new file mode 100644 index 00000000000..d5c2c54afcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_RMO_ALL/safe085.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe085_RMO_ALL/test.desc new file mode 100644 index 00000000000..1cd75edd1e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe085.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_RMO_OPC/safe085.c b/regression/goto-instrument-wmm-core/ppc_safe085_RMO_OPC/safe085.c new file mode 100644 index 00000000000..d5c2c54afcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_RMO_OPC/safe085.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe085_RMO_OPC/test.desc new file mode 100644 index 00000000000..4c4982f79b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe085.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_RMO_OPT/safe085.c b/regression/goto-instrument-wmm-core/ppc_safe085_RMO_OPT/safe085.c new file mode 100644 index 00000000000..d5c2c54afcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_RMO_OPT/safe085.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe085_RMO_OPT/test.desc new file mode 100644 index 00000000000..cd441ddf3c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe085.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_SC_SAFE/safe085.c b/regression/goto-instrument-wmm-core/ppc_safe085_SC_SAFE/safe085.c new file mode 100644 index 00000000000..d5c2c54afcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_SC_SAFE/safe085.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe085_SC_SAFE/test.desc new file mode 100644 index 00000000000..5db3868c544 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe085.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_TSO_ALL/safe085.c b/regression/goto-instrument-wmm-core/ppc_safe085_TSO_ALL/safe085.c new file mode 100644 index 00000000000..d5c2c54afcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_TSO_ALL/safe085.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe085_TSO_ALL/test.desc new file mode 100644 index 00000000000..cc47d3f8281 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe085.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_TSO_OPC/safe085.c b/regression/goto-instrument-wmm-core/ppc_safe085_TSO_OPC/safe085.c new file mode 100644 index 00000000000..d5c2c54afcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_TSO_OPC/safe085.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe085_TSO_OPC/test.desc new file mode 100644 index 00000000000..2bd7a74cd06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe085.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_TSO_OPT/safe085.c b/regression/goto-instrument-wmm-core/ppc_safe085_TSO_OPT/safe085.c new file mode 100644 index 00000000000..d5c2c54afcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_TSO_OPT/safe085.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe085_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe085_TSO_OPT/test.desc new file mode 100644 index 00000000000..36122672c47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe085_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe085.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_CAV11_SAFE/safe086.c b/regression/goto-instrument-wmm-core/ppc_safe086_CAV11_SAFE/safe086.c new file mode 100644 index 00000000000..4f5dbec9a65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_CAV11_SAFE/safe086.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe086_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..3e90f7b53cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe086.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_POWER_ALL/safe086.c b/regression/goto-instrument-wmm-core/ppc_safe086_POWER_ALL/safe086.c new file mode 100644 index 00000000000..4f5dbec9a65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_POWER_ALL/safe086.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe086_POWER_ALL/test.desc new file mode 100644 index 00000000000..d92c8cf4d5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe086.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_POWER_OPC/safe086.c b/regression/goto-instrument-wmm-core/ppc_safe086_POWER_OPC/safe086.c new file mode 100644 index 00000000000..4f5dbec9a65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_POWER_OPC/safe086.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe086_POWER_OPC/test.desc new file mode 100644 index 00000000000..d2cafc7c88a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe086.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_POWER_OPT/safe086.c b/regression/goto-instrument-wmm-core/ppc_safe086_POWER_OPT/safe086.c new file mode 100644 index 00000000000..4f5dbec9a65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_POWER_OPT/safe086.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe086_POWER_OPT/test.desc new file mode 100644 index 00000000000..1e0cdb03f15 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe086.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_PSO_ALL/safe086.c b/regression/goto-instrument-wmm-core/ppc_safe086_PSO_ALL/safe086.c new file mode 100644 index 00000000000..4f5dbec9a65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_PSO_ALL/safe086.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe086_PSO_ALL/test.desc new file mode 100644 index 00000000000..9fca467bbdf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe086.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_PSO_OPC/safe086.c b/regression/goto-instrument-wmm-core/ppc_safe086_PSO_OPC/safe086.c new file mode 100644 index 00000000000..4f5dbec9a65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_PSO_OPC/safe086.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe086_PSO_OPC/test.desc new file mode 100644 index 00000000000..a26ba5f29a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe086.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_PSO_OPT/safe086.c b/regression/goto-instrument-wmm-core/ppc_safe086_PSO_OPT/safe086.c new file mode 100644 index 00000000000..4f5dbec9a65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_PSO_OPT/safe086.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe086_PSO_OPT/test.desc new file mode 100644 index 00000000000..1a781b88f69 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe086.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_RMO_ALL/safe086.c b/regression/goto-instrument-wmm-core/ppc_safe086_RMO_ALL/safe086.c new file mode 100644 index 00000000000..4f5dbec9a65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_RMO_ALL/safe086.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe086_RMO_ALL/test.desc new file mode 100644 index 00000000000..d5527ac3119 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe086.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_RMO_OPC/safe086.c b/regression/goto-instrument-wmm-core/ppc_safe086_RMO_OPC/safe086.c new file mode 100644 index 00000000000..4f5dbec9a65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_RMO_OPC/safe086.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe086_RMO_OPC/test.desc new file mode 100644 index 00000000000..70656e3c58a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe086.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_RMO_OPT/safe086.c b/regression/goto-instrument-wmm-core/ppc_safe086_RMO_OPT/safe086.c new file mode 100644 index 00000000000..4f5dbec9a65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_RMO_OPT/safe086.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe086_RMO_OPT/test.desc new file mode 100644 index 00000000000..8fe4cd71430 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe086.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_SC_SAFE/safe086.c b/regression/goto-instrument-wmm-core/ppc_safe086_SC_SAFE/safe086.c new file mode 100644 index 00000000000..4f5dbec9a65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_SC_SAFE/safe086.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe086_SC_SAFE/test.desc new file mode 100644 index 00000000000..9f443bd83ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe086.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_TSO_ALL/safe086.c b/regression/goto-instrument-wmm-core/ppc_safe086_TSO_ALL/safe086.c new file mode 100644 index 00000000000..4f5dbec9a65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_TSO_ALL/safe086.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe086_TSO_ALL/test.desc new file mode 100644 index 00000000000..a8ee417cad7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe086.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_TSO_OPC/safe086.c b/regression/goto-instrument-wmm-core/ppc_safe086_TSO_OPC/safe086.c new file mode 100644 index 00000000000..4f5dbec9a65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_TSO_OPC/safe086.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe086_TSO_OPC/test.desc new file mode 100644 index 00000000000..e22fca0f6a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe086.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_TSO_OPT/safe086.c b/regression/goto-instrument-wmm-core/ppc_safe086_TSO_OPT/safe086.c new file mode 100644 index 00000000000..4f5dbec9a65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_TSO_OPT/safe086.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe086_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe086_TSO_OPT/test.desc new file mode 100644 index 00000000000..1167fd2302b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe086_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe086.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_CAV11_ERROR/safe087.c b/regression/goto-instrument-wmm-core/ppc_safe087_CAV11_ERROR/safe087.c new file mode 100644 index 00000000000..1a910fb2296 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_CAV11_ERROR/safe087.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe087_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..6bfcc2b2030 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe087.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_POWER_ALL/safe087.c b/regression/goto-instrument-wmm-core/ppc_safe087_POWER_ALL/safe087.c new file mode 100644 index 00000000000..1a910fb2296 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_POWER_ALL/safe087.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe087_POWER_ALL/test.desc new file mode 100644 index 00000000000..047f0ebf895 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe087.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_POWER_OPC/safe087.c b/regression/goto-instrument-wmm-core/ppc_safe087_POWER_OPC/safe087.c new file mode 100644 index 00000000000..1a910fb2296 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_POWER_OPC/safe087.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe087_POWER_OPC/test.desc new file mode 100644 index 00000000000..6abb232ea15 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe087.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe087_POWER_OPT/test.desc index 34fbb9ae149..15712002f60 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe087_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe087_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe087.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_PSO_ALL/safe087.c b/regression/goto-instrument-wmm-core/ppc_safe087_PSO_ALL/safe087.c new file mode 100644 index 00000000000..1a910fb2296 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_PSO_ALL/safe087.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe087_PSO_ALL/test.desc new file mode 100644 index 00000000000..6686a0f0421 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe087.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_PSO_OPC/safe087.c b/regression/goto-instrument-wmm-core/ppc_safe087_PSO_OPC/safe087.c new file mode 100644 index 00000000000..1a910fb2296 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_PSO_OPC/safe087.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe087_PSO_OPC/test.desc new file mode 100644 index 00000000000..63e74ab2816 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe087.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_PSO_OPT/safe087.c b/regression/goto-instrument-wmm-core/ppc_safe087_PSO_OPT/safe087.c new file mode 100644 index 00000000000..1a910fb2296 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_PSO_OPT/safe087.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe087_PSO_OPT/test.desc new file mode 100644 index 00000000000..4a9fa716eb2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe087.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_RMO_ALL/safe087.c b/regression/goto-instrument-wmm-core/ppc_safe087_RMO_ALL/safe087.c new file mode 100644 index 00000000000..1a910fb2296 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_RMO_ALL/safe087.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe087_RMO_ALL/test.desc new file mode 100644 index 00000000000..922aa309c02 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe087.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_RMO_OPC/safe087.c b/regression/goto-instrument-wmm-core/ppc_safe087_RMO_OPC/safe087.c new file mode 100644 index 00000000000..1a910fb2296 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_RMO_OPC/safe087.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe087_RMO_OPC/test.desc new file mode 100644 index 00000000000..5be0360af1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe087.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_RMO_OPT/safe087.c b/regression/goto-instrument-wmm-core/ppc_safe087_RMO_OPT/safe087.c new file mode 100644 index 00000000000..1a910fb2296 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_RMO_OPT/safe087.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe087_RMO_OPT/test.desc new file mode 100644 index 00000000000..e252344aa17 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe087.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_SC_SAFE/safe087.c b/regression/goto-instrument-wmm-core/ppc_safe087_SC_SAFE/safe087.c new file mode 100644 index 00000000000..1a910fb2296 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_SC_SAFE/safe087.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe087_SC_SAFE/test.desc new file mode 100644 index 00000000000..717b5c8c065 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe087.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_TSO_ALL/safe087.c b/regression/goto-instrument-wmm-core/ppc_safe087_TSO_ALL/safe087.c new file mode 100644 index 00000000000..1a910fb2296 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_TSO_ALL/safe087.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe087_TSO_ALL/test.desc new file mode 100644 index 00000000000..19854aaf7fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe087.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_TSO_OPC/safe087.c b/regression/goto-instrument-wmm-core/ppc_safe087_TSO_OPC/safe087.c new file mode 100644 index 00000000000..1a910fb2296 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_TSO_OPC/safe087.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe087_TSO_OPC/test.desc new file mode 100644 index 00000000000..edb2d3a4a97 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe087.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_TSO_OPT/safe087.c b/regression/goto-instrument-wmm-core/ppc_safe087_TSO_OPT/safe087.c new file mode 100644 index 00000000000..1a910fb2296 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_TSO_OPT/safe087.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe087_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe087_TSO_OPT/test.desc new file mode 100644 index 00000000000..3faed007c21 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe087_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe087.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_CAV11_SAFE/safe088.c b/regression/goto-instrument-wmm-core/ppc_safe088_CAV11_SAFE/safe088.c new file mode 100644 index 00000000000..db643112cea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_CAV11_SAFE/safe088.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe088_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..1e5bdd92196 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe088.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_POWER_ALL/safe088.c b/regression/goto-instrument-wmm-core/ppc_safe088_POWER_ALL/safe088.c new file mode 100644 index 00000000000..db643112cea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_POWER_ALL/safe088.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe088_POWER_ALL/test.desc new file mode 100644 index 00000000000..7da6160e58a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe088.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_POWER_OPC/safe088.c b/regression/goto-instrument-wmm-core/ppc_safe088_POWER_OPC/safe088.c new file mode 100644 index 00000000000..db643112cea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_POWER_OPC/safe088.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe088_POWER_OPC/test.desc new file mode 100644 index 00000000000..38aa44b7e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe088.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_POWER_OPT/safe088.c b/regression/goto-instrument-wmm-core/ppc_safe088_POWER_OPT/safe088.c new file mode 100644 index 00000000000..db643112cea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_POWER_OPT/safe088.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe088_POWER_OPT/test.desc new file mode 100644 index 00000000000..f01e381fdd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe088.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_PSO_ALL/safe088.c b/regression/goto-instrument-wmm-core/ppc_safe088_PSO_ALL/safe088.c new file mode 100644 index 00000000000..db643112cea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_PSO_ALL/safe088.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe088_PSO_ALL/test.desc new file mode 100644 index 00000000000..5dc2189f960 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe088.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_PSO_OPC/safe088.c b/regression/goto-instrument-wmm-core/ppc_safe088_PSO_OPC/safe088.c new file mode 100644 index 00000000000..db643112cea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_PSO_OPC/safe088.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe088_PSO_OPC/test.desc new file mode 100644 index 00000000000..52da608424b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe088.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_PSO_OPT/safe088.c b/regression/goto-instrument-wmm-core/ppc_safe088_PSO_OPT/safe088.c new file mode 100644 index 00000000000..db643112cea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_PSO_OPT/safe088.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe088_PSO_OPT/test.desc new file mode 100644 index 00000000000..43f1b45ea1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe088.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_RMO_ALL/safe088.c b/regression/goto-instrument-wmm-core/ppc_safe088_RMO_ALL/safe088.c new file mode 100644 index 00000000000..db643112cea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_RMO_ALL/safe088.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe088_RMO_ALL/test.desc new file mode 100644 index 00000000000..28d7dc52a1c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe088.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_RMO_OPC/safe088.c b/regression/goto-instrument-wmm-core/ppc_safe088_RMO_OPC/safe088.c new file mode 100644 index 00000000000..db643112cea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_RMO_OPC/safe088.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe088_RMO_OPC/test.desc new file mode 100644 index 00000000000..adec6d80215 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe088.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_RMO_OPT/safe088.c b/regression/goto-instrument-wmm-core/ppc_safe088_RMO_OPT/safe088.c new file mode 100644 index 00000000000..db643112cea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_RMO_OPT/safe088.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe088_RMO_OPT/test.desc new file mode 100644 index 00000000000..958c11f3794 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe088.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_SC_SAFE/safe088.c b/regression/goto-instrument-wmm-core/ppc_safe088_SC_SAFE/safe088.c new file mode 100644 index 00000000000..db643112cea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_SC_SAFE/safe088.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe088_SC_SAFE/test.desc new file mode 100644 index 00000000000..d821a69e917 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe088.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_TSO_ALL/safe088.c b/regression/goto-instrument-wmm-core/ppc_safe088_TSO_ALL/safe088.c new file mode 100644 index 00000000000..db643112cea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_TSO_ALL/safe088.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe088_TSO_ALL/test.desc new file mode 100644 index 00000000000..9cc11b7e1cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe088.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_TSO_OPC/safe088.c b/regression/goto-instrument-wmm-core/ppc_safe088_TSO_OPC/safe088.c new file mode 100644 index 00000000000..db643112cea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_TSO_OPC/safe088.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe088_TSO_OPC/test.desc new file mode 100644 index 00000000000..d030ffe948b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe088.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_TSO_OPT/safe088.c b/regression/goto-instrument-wmm-core/ppc_safe088_TSO_OPT/safe088.c new file mode 100644 index 00000000000..db643112cea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_TSO_OPT/safe088.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe088_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe088_TSO_OPT/test.desc new file mode 100644 index 00000000000..eaff3372225 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe088_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe088.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_CAV11_SAFE/safe089.c b/regression/goto-instrument-wmm-core/ppc_safe089_CAV11_SAFE/safe089.c new file mode 100644 index 00000000000..ff1cdb3375d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_CAV11_SAFE/safe089.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe089_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..94acc6fe6b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe089.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_POWER_ALL/safe089.c b/regression/goto-instrument-wmm-core/ppc_safe089_POWER_ALL/safe089.c new file mode 100644 index 00000000000..ff1cdb3375d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_POWER_ALL/safe089.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe089_POWER_ALL/test.desc new file mode 100644 index 00000000000..396e209fed3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe089.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_POWER_OPC/safe089.c b/regression/goto-instrument-wmm-core/ppc_safe089_POWER_OPC/safe089.c new file mode 100644 index 00000000000..ff1cdb3375d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_POWER_OPC/safe089.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe089_POWER_OPC/test.desc new file mode 100644 index 00000000000..693dad78e09 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe089.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_POWER_OPT/safe089.c b/regression/goto-instrument-wmm-core/ppc_safe089_POWER_OPT/safe089.c new file mode 100644 index 00000000000..ff1cdb3375d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_POWER_OPT/safe089.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe089_POWER_OPT/test.desc new file mode 100644 index 00000000000..7b497c9ba69 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe089.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_PSO_ALL/safe089.c b/regression/goto-instrument-wmm-core/ppc_safe089_PSO_ALL/safe089.c new file mode 100644 index 00000000000..ff1cdb3375d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_PSO_ALL/safe089.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe089_PSO_ALL/test.desc new file mode 100644 index 00000000000..a96afa6c1dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe089.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_PSO_OPC/safe089.c b/regression/goto-instrument-wmm-core/ppc_safe089_PSO_OPC/safe089.c new file mode 100644 index 00000000000..ff1cdb3375d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_PSO_OPC/safe089.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe089_PSO_OPC/test.desc new file mode 100644 index 00000000000..8ce7d6a224b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe089.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_PSO_OPT/safe089.c b/regression/goto-instrument-wmm-core/ppc_safe089_PSO_OPT/safe089.c new file mode 100644 index 00000000000..ff1cdb3375d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_PSO_OPT/safe089.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe089_PSO_OPT/test.desc new file mode 100644 index 00000000000..8338ba43bd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe089.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_RMO_ALL/safe089.c b/regression/goto-instrument-wmm-core/ppc_safe089_RMO_ALL/safe089.c new file mode 100644 index 00000000000..ff1cdb3375d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_RMO_ALL/safe089.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe089_RMO_ALL/test.desc new file mode 100644 index 00000000000..2fa6d1d94a0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe089.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_RMO_OPC/safe089.c b/regression/goto-instrument-wmm-core/ppc_safe089_RMO_OPC/safe089.c new file mode 100644 index 00000000000..ff1cdb3375d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_RMO_OPC/safe089.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe089_RMO_OPC/test.desc new file mode 100644 index 00000000000..42ff8d6b5b5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe089.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_RMO_OPT/safe089.c b/regression/goto-instrument-wmm-core/ppc_safe089_RMO_OPT/safe089.c new file mode 100644 index 00000000000..ff1cdb3375d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_RMO_OPT/safe089.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe089_RMO_OPT/test.desc new file mode 100644 index 00000000000..5b02d6d75bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe089.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_SC_SAFE/safe089.c b/regression/goto-instrument-wmm-core/ppc_safe089_SC_SAFE/safe089.c new file mode 100644 index 00000000000..ff1cdb3375d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_SC_SAFE/safe089.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe089_SC_SAFE/test.desc new file mode 100644 index 00000000000..fd9e7ca2d7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe089.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_TSO_ALL/safe089.c b/regression/goto-instrument-wmm-core/ppc_safe089_TSO_ALL/safe089.c new file mode 100644 index 00000000000..ff1cdb3375d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_TSO_ALL/safe089.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe089_TSO_ALL/test.desc new file mode 100644 index 00000000000..1246af51baa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe089.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_TSO_OPC/safe089.c b/regression/goto-instrument-wmm-core/ppc_safe089_TSO_OPC/safe089.c new file mode 100644 index 00000000000..ff1cdb3375d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_TSO_OPC/safe089.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe089_TSO_OPC/test.desc new file mode 100644 index 00000000000..7d0c175f986 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe089.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_TSO_OPT/safe089.c b/regression/goto-instrument-wmm-core/ppc_safe089_TSO_OPT/safe089.c new file mode 100644 index 00000000000..ff1cdb3375d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_TSO_OPT/safe089.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe089_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe089_TSO_OPT/test.desc new file mode 100644 index 00000000000..b0bc6be3d7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe089_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe089.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_CAV11_ERROR/safe090.c b/regression/goto-instrument-wmm-core/ppc_safe090_CAV11_ERROR/safe090.c new file mode 100644 index 00000000000..e303b7c8b05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_CAV11_ERROR/safe090.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe090_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..6d289af4cad --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe090.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_POWER_ALL/safe090.c b/regression/goto-instrument-wmm-core/ppc_safe090_POWER_ALL/safe090.c new file mode 100644 index 00000000000..e303b7c8b05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_POWER_ALL/safe090.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe090_POWER_ALL/test.desc new file mode 100644 index 00000000000..c5b35779e6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe090.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_POWER_OPC/safe090.c b/regression/goto-instrument-wmm-core/ppc_safe090_POWER_OPC/safe090.c new file mode 100644 index 00000000000..e303b7c8b05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_POWER_OPC/safe090.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe090_POWER_OPC/test.desc new file mode 100644 index 00000000000..d53018c0d55 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe090.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe090_POWER_OPT/test.desc index cf5bb625e65..ca8a6e56558 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe090_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe090_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe090.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_PSO_ALL/safe090.c b/regression/goto-instrument-wmm-core/ppc_safe090_PSO_ALL/safe090.c new file mode 100644 index 00000000000..e303b7c8b05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_PSO_ALL/safe090.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe090_PSO_ALL/test.desc new file mode 100644 index 00000000000..b451fec0a8d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe090.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_PSO_OPC/safe090.c b/regression/goto-instrument-wmm-core/ppc_safe090_PSO_OPC/safe090.c new file mode 100644 index 00000000000..e303b7c8b05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_PSO_OPC/safe090.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe090_PSO_OPC/test.desc new file mode 100644 index 00000000000..9879450d845 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe090.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_PSO_OPT/safe090.c b/regression/goto-instrument-wmm-core/ppc_safe090_PSO_OPT/safe090.c new file mode 100644 index 00000000000..e303b7c8b05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_PSO_OPT/safe090.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe090_PSO_OPT/test.desc new file mode 100644 index 00000000000..a8c6eb74857 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe090.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_RMO_ALL/safe090.c b/regression/goto-instrument-wmm-core/ppc_safe090_RMO_ALL/safe090.c new file mode 100644 index 00000000000..e303b7c8b05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_RMO_ALL/safe090.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe090_RMO_ALL/test.desc new file mode 100644 index 00000000000..fd6f1cab869 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe090.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_RMO_OPC/safe090.c b/regression/goto-instrument-wmm-core/ppc_safe090_RMO_OPC/safe090.c new file mode 100644 index 00000000000..e303b7c8b05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_RMO_OPC/safe090.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe090_RMO_OPC/test.desc new file mode 100644 index 00000000000..68efe0557b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe090.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_RMO_OPT/safe090.c b/regression/goto-instrument-wmm-core/ppc_safe090_RMO_OPT/safe090.c new file mode 100644 index 00000000000..e303b7c8b05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_RMO_OPT/safe090.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe090_RMO_OPT/test.desc new file mode 100644 index 00000000000..7ee8d562a2d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe090.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_SC_SAFE/safe090.c b/regression/goto-instrument-wmm-core/ppc_safe090_SC_SAFE/safe090.c new file mode 100644 index 00000000000..e303b7c8b05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_SC_SAFE/safe090.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe090_SC_SAFE/test.desc new file mode 100644 index 00000000000..23a01929222 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe090.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_TSO_ALL/safe090.c b/regression/goto-instrument-wmm-core/ppc_safe090_TSO_ALL/safe090.c new file mode 100644 index 00000000000..e303b7c8b05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_TSO_ALL/safe090.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe090_TSO_ALL/test.desc new file mode 100644 index 00000000000..5d260651692 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe090.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_TSO_OPC/safe090.c b/regression/goto-instrument-wmm-core/ppc_safe090_TSO_OPC/safe090.c new file mode 100644 index 00000000000..e303b7c8b05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_TSO_OPC/safe090.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe090_TSO_OPC/test.desc new file mode 100644 index 00000000000..b42ff4097bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe090.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_TSO_OPT/safe090.c b/regression/goto-instrument-wmm-core/ppc_safe090_TSO_OPT/safe090.c new file mode 100644 index 00000000000..e303b7c8b05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_TSO_OPT/safe090.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe090_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe090_TSO_OPT/test.desc new file mode 100644 index 00000000000..b18b5346ccf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe090_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe090.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_CAV11_ERROR/safe091.c b/regression/goto-instrument-wmm-core/ppc_safe091_CAV11_ERROR/safe091.c new file mode 100644 index 00000000000..f058dac7a3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_CAV11_ERROR/safe091.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe091_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..b3628a36b26 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe091.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_POWER_ALL/safe091.c b/regression/goto-instrument-wmm-core/ppc_safe091_POWER_ALL/safe091.c new file mode 100644 index 00000000000..f058dac7a3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_POWER_ALL/safe091.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe091_POWER_ALL/test.desc new file mode 100644 index 00000000000..2f3b61fde81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe091.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_POWER_OPC/safe091.c b/regression/goto-instrument-wmm-core/ppc_safe091_POWER_OPC/safe091.c new file mode 100644 index 00000000000..f058dac7a3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_POWER_OPC/safe091.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe091_POWER_OPC/test.desc new file mode 100644 index 00000000000..9d3df42bd8d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe091.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_POWER_OPT/safe091.c b/regression/goto-instrument-wmm-core/ppc_safe091_POWER_OPT/safe091.c new file mode 100644 index 00000000000..f058dac7a3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_POWER_OPT/safe091.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe091_POWER_OPT/test.desc new file mode 100644 index 00000000000..f5e7fd415d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe091.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_PSO_ALL/safe091.c b/regression/goto-instrument-wmm-core/ppc_safe091_PSO_ALL/safe091.c new file mode 100644 index 00000000000..f058dac7a3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_PSO_ALL/safe091.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe091_PSO_ALL/test.desc new file mode 100644 index 00000000000..5d53b4ea7d5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe091.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_PSO_OPC/safe091.c b/regression/goto-instrument-wmm-core/ppc_safe091_PSO_OPC/safe091.c new file mode 100644 index 00000000000..f058dac7a3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_PSO_OPC/safe091.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe091_PSO_OPC/test.desc new file mode 100644 index 00000000000..c228eee5d5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe091.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_PSO_OPT/safe091.c b/regression/goto-instrument-wmm-core/ppc_safe091_PSO_OPT/safe091.c new file mode 100644 index 00000000000..f058dac7a3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_PSO_OPT/safe091.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe091_PSO_OPT/test.desc new file mode 100644 index 00000000000..cabbe7b377e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe091.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_RMO_ALL/safe091.c b/regression/goto-instrument-wmm-core/ppc_safe091_RMO_ALL/safe091.c new file mode 100644 index 00000000000..f058dac7a3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_RMO_ALL/safe091.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe091_RMO_ALL/test.desc new file mode 100644 index 00000000000..6706ece1023 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe091.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_RMO_OPC/safe091.c b/regression/goto-instrument-wmm-core/ppc_safe091_RMO_OPC/safe091.c new file mode 100644 index 00000000000..f058dac7a3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_RMO_OPC/safe091.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe091_RMO_OPC/test.desc new file mode 100644 index 00000000000..a018e75eff4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe091.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_RMO_OPT/safe091.c b/regression/goto-instrument-wmm-core/ppc_safe091_RMO_OPT/safe091.c new file mode 100644 index 00000000000..f058dac7a3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_RMO_OPT/safe091.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe091_RMO_OPT/test.desc new file mode 100644 index 00000000000..7f121fea814 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe091.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_SC_SAFE/safe091.c b/regression/goto-instrument-wmm-core/ppc_safe091_SC_SAFE/safe091.c new file mode 100644 index 00000000000..f058dac7a3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_SC_SAFE/safe091.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe091_SC_SAFE/test.desc new file mode 100644 index 00000000000..30d7af8b60f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe091.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_TSO_ALL/safe091.c b/regression/goto-instrument-wmm-core/ppc_safe091_TSO_ALL/safe091.c new file mode 100644 index 00000000000..f058dac7a3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_TSO_ALL/safe091.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe091_TSO_ALL/test.desc new file mode 100644 index 00000000000..75d03b1eddb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe091.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_TSO_OPC/safe091.c b/regression/goto-instrument-wmm-core/ppc_safe091_TSO_OPC/safe091.c new file mode 100644 index 00000000000..f058dac7a3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_TSO_OPC/safe091.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe091_TSO_OPC/test.desc new file mode 100644 index 00000000000..46176f90088 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe091.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_TSO_OPT/safe091.c b/regression/goto-instrument-wmm-core/ppc_safe091_TSO_OPT/safe091.c new file mode 100644 index 00000000000..f058dac7a3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_TSO_OPT/safe091.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 2; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe091_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe091_TSO_OPT/test.desc new file mode 100644 index 00000000000..c224762b25d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe091_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe091.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_CAV11_SAFE/safe092.c b/regression/goto-instrument-wmm-core/ppc_safe092_CAV11_SAFE/safe092.c new file mode 100644 index 00000000000..525b3377357 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_CAV11_SAFE/safe092.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe092_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..2b5814c3826 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe092.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_POWER_ALL/safe092.c b/regression/goto-instrument-wmm-core/ppc_safe092_POWER_ALL/safe092.c new file mode 100644 index 00000000000..525b3377357 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_POWER_ALL/safe092.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe092_POWER_ALL/test.desc new file mode 100644 index 00000000000..d50c272326c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe092.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_POWER_OPC/safe092.c b/regression/goto-instrument-wmm-core/ppc_safe092_POWER_OPC/safe092.c new file mode 100644 index 00000000000..525b3377357 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_POWER_OPC/safe092.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe092_POWER_OPC/test.desc new file mode 100644 index 00000000000..62b2c2df846 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe092.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_POWER_OPT/safe092.c b/regression/goto-instrument-wmm-core/ppc_safe092_POWER_OPT/safe092.c new file mode 100644 index 00000000000..525b3377357 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_POWER_OPT/safe092.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe092_POWER_OPT/test.desc new file mode 100644 index 00000000000..f9a7b25e518 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe092.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_PSO_ALL/safe092.c b/regression/goto-instrument-wmm-core/ppc_safe092_PSO_ALL/safe092.c new file mode 100644 index 00000000000..525b3377357 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_PSO_ALL/safe092.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe092_PSO_ALL/test.desc new file mode 100644 index 00000000000..1f4e445c394 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe092.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_PSO_OPC/safe092.c b/regression/goto-instrument-wmm-core/ppc_safe092_PSO_OPC/safe092.c new file mode 100644 index 00000000000..525b3377357 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_PSO_OPC/safe092.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe092_PSO_OPC/test.desc new file mode 100644 index 00000000000..fbb5f422e93 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe092.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_PSO_OPT/safe092.c b/regression/goto-instrument-wmm-core/ppc_safe092_PSO_OPT/safe092.c new file mode 100644 index 00000000000..525b3377357 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_PSO_OPT/safe092.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe092_PSO_OPT/test.desc new file mode 100644 index 00000000000..4504d434286 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe092.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_RMO_ALL/safe092.c b/regression/goto-instrument-wmm-core/ppc_safe092_RMO_ALL/safe092.c new file mode 100644 index 00000000000..525b3377357 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_RMO_ALL/safe092.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe092_RMO_ALL/test.desc new file mode 100644 index 00000000000..4aa8471da9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe092.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_RMO_OPC/safe092.c b/regression/goto-instrument-wmm-core/ppc_safe092_RMO_OPC/safe092.c new file mode 100644 index 00000000000..525b3377357 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_RMO_OPC/safe092.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe092_RMO_OPC/test.desc new file mode 100644 index 00000000000..beac14546b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe092.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_RMO_OPT/safe092.c b/regression/goto-instrument-wmm-core/ppc_safe092_RMO_OPT/safe092.c new file mode 100644 index 00000000000..525b3377357 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_RMO_OPT/safe092.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe092_RMO_OPT/test.desc new file mode 100644 index 00000000000..99a8d2886a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe092.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_SC_SAFE/safe092.c b/regression/goto-instrument-wmm-core/ppc_safe092_SC_SAFE/safe092.c new file mode 100644 index 00000000000..525b3377357 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_SC_SAFE/safe092.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe092_SC_SAFE/test.desc new file mode 100644 index 00000000000..18abc715d48 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe092.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_TSO_ALL/safe092.c b/regression/goto-instrument-wmm-core/ppc_safe092_TSO_ALL/safe092.c new file mode 100644 index 00000000000..525b3377357 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_TSO_ALL/safe092.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe092_TSO_ALL/test.desc new file mode 100644 index 00000000000..d51068f8cba --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe092.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_TSO_OPC/safe092.c b/regression/goto-instrument-wmm-core/ppc_safe092_TSO_OPC/safe092.c new file mode 100644 index 00000000000..525b3377357 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_TSO_OPC/safe092.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe092_TSO_OPC/test.desc new file mode 100644 index 00000000000..83f18a5f59b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe092.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_TSO_OPT/safe092.c b/regression/goto-instrument-wmm-core/ppc_safe092_TSO_OPT/safe092.c new file mode 100644 index 00000000000..525b3377357 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_TSO_OPT/safe092.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe092_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe092_TSO_OPT/test.desc new file mode 100644 index 00000000000..b13aff99d3e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe092_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe092.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_CAV11_SAFE/safe093.c b/regression/goto-instrument-wmm-core/ppc_safe093_CAV11_SAFE/safe093.c new file mode 100644 index 00000000000..c9ba71d9e72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_CAV11_SAFE/safe093.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe093_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..ff39ab7807c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe093.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_POWER_ALL/safe093.c b/regression/goto-instrument-wmm-core/ppc_safe093_POWER_ALL/safe093.c new file mode 100644 index 00000000000..c9ba71d9e72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_POWER_ALL/safe093.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe093_POWER_ALL/test.desc new file mode 100644 index 00000000000..1a6b58fc5bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe093.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_POWER_OPC/safe093.c b/regression/goto-instrument-wmm-core/ppc_safe093_POWER_OPC/safe093.c new file mode 100644 index 00000000000..c9ba71d9e72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_POWER_OPC/safe093.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe093_POWER_OPC/test.desc new file mode 100644 index 00000000000..1d9a71930b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe093.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_POWER_OPT/safe093.c b/regression/goto-instrument-wmm-core/ppc_safe093_POWER_OPT/safe093.c new file mode 100644 index 00000000000..c9ba71d9e72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_POWER_OPT/safe093.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe093_POWER_OPT/test.desc new file mode 100644 index 00000000000..935b6668cdb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe093.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_PSO_ALL/safe093.c b/regression/goto-instrument-wmm-core/ppc_safe093_PSO_ALL/safe093.c new file mode 100644 index 00000000000..c9ba71d9e72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_PSO_ALL/safe093.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe093_PSO_ALL/test.desc new file mode 100644 index 00000000000..f2d4961f240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe093.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_PSO_OPC/safe093.c b/regression/goto-instrument-wmm-core/ppc_safe093_PSO_OPC/safe093.c new file mode 100644 index 00000000000..c9ba71d9e72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_PSO_OPC/safe093.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe093_PSO_OPC/test.desc new file mode 100644 index 00000000000..dc8e3a29862 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe093.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_PSO_OPT/safe093.c b/regression/goto-instrument-wmm-core/ppc_safe093_PSO_OPT/safe093.c new file mode 100644 index 00000000000..c9ba71d9e72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_PSO_OPT/safe093.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe093_PSO_OPT/test.desc new file mode 100644 index 00000000000..4f0f6d69df6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe093.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_RMO_ALL/safe093.c b/regression/goto-instrument-wmm-core/ppc_safe093_RMO_ALL/safe093.c new file mode 100644 index 00000000000..c9ba71d9e72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_RMO_ALL/safe093.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe093_RMO_ALL/test.desc new file mode 100644 index 00000000000..483e8460426 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe093.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_RMO_OPC/safe093.c b/regression/goto-instrument-wmm-core/ppc_safe093_RMO_OPC/safe093.c new file mode 100644 index 00000000000..c9ba71d9e72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_RMO_OPC/safe093.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe093_RMO_OPC/test.desc new file mode 100644 index 00000000000..d0c26f76986 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe093.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_RMO_OPT/safe093.c b/regression/goto-instrument-wmm-core/ppc_safe093_RMO_OPT/safe093.c new file mode 100644 index 00000000000..c9ba71d9e72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_RMO_OPT/safe093.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe093_RMO_OPT/test.desc new file mode 100644 index 00000000000..1a375b2b3ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe093.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_SC_SAFE/safe093.c b/regression/goto-instrument-wmm-core/ppc_safe093_SC_SAFE/safe093.c new file mode 100644 index 00000000000..c9ba71d9e72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_SC_SAFE/safe093.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe093_SC_SAFE/test.desc new file mode 100644 index 00000000000..d5b9f3df6d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe093.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_TSO_ALL/safe093.c b/regression/goto-instrument-wmm-core/ppc_safe093_TSO_ALL/safe093.c new file mode 100644 index 00000000000..c9ba71d9e72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_TSO_ALL/safe093.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe093_TSO_ALL/test.desc new file mode 100644 index 00000000000..69dd2d5b732 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe093.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_TSO_OPC/safe093.c b/regression/goto-instrument-wmm-core/ppc_safe093_TSO_OPC/safe093.c new file mode 100644 index 00000000000..c9ba71d9e72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_TSO_OPC/safe093.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe093_TSO_OPC/test.desc new file mode 100644 index 00000000000..39acb45d7cc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe093.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_TSO_OPT/safe093.c b/regression/goto-instrument-wmm-core/ppc_safe093_TSO_OPT/safe093.c new file mode 100644 index 00000000000..c9ba71d9e72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_TSO_OPT/safe093.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe093_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe093_TSO_OPT/test.desc new file mode 100644 index 00000000000..0c23aaad143 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe093_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe093.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_CAV11_ERROR/safe094.c b/regression/goto-instrument-wmm-core/ppc_safe094_CAV11_ERROR/safe094.c new file mode 100644 index 00000000000..d24a8399c71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_CAV11_ERROR/safe094.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe094_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..7b93816fbcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe094.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_POWER_ALL/safe094.c b/regression/goto-instrument-wmm-core/ppc_safe094_POWER_ALL/safe094.c new file mode 100644 index 00000000000..d24a8399c71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_POWER_ALL/safe094.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe094_POWER_ALL/test.desc new file mode 100644 index 00000000000..3c2560ee8a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe094.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_POWER_OPC/safe094.c b/regression/goto-instrument-wmm-core/ppc_safe094_POWER_OPC/safe094.c new file mode 100644 index 00000000000..d24a8399c71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_POWER_OPC/safe094.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe094_POWER_OPC/test.desc new file mode 100644 index 00000000000..8ffe8b30c05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe094.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_POWER_OPT/safe094.c b/regression/goto-instrument-wmm-core/ppc_safe094_POWER_OPT/safe094.c new file mode 100644 index 00000000000..d24a8399c71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_POWER_OPT/safe094.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe094_POWER_OPT/test.desc new file mode 100644 index 00000000000..7e693ac8c3e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe094.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_PSO_ALL/safe094.c b/regression/goto-instrument-wmm-core/ppc_safe094_PSO_ALL/safe094.c new file mode 100644 index 00000000000..d24a8399c71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_PSO_ALL/safe094.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe094_PSO_ALL/test.desc new file mode 100644 index 00000000000..be0e16b99b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe094.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_PSO_OPC/safe094.c b/regression/goto-instrument-wmm-core/ppc_safe094_PSO_OPC/safe094.c new file mode 100644 index 00000000000..d24a8399c71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_PSO_OPC/safe094.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe094_PSO_OPC/test.desc new file mode 100644 index 00000000000..a3d602d68c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe094.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_PSO_OPT/safe094.c b/regression/goto-instrument-wmm-core/ppc_safe094_PSO_OPT/safe094.c new file mode 100644 index 00000000000..d24a8399c71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_PSO_OPT/safe094.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe094_PSO_OPT/test.desc new file mode 100644 index 00000000000..edf22f58819 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe094.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_RMO_ALL/safe094.c b/regression/goto-instrument-wmm-core/ppc_safe094_RMO_ALL/safe094.c new file mode 100644 index 00000000000..d24a8399c71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_RMO_ALL/safe094.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe094_RMO_ALL/test.desc new file mode 100644 index 00000000000..dccb401e4e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe094.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_RMO_OPC/safe094.c b/regression/goto-instrument-wmm-core/ppc_safe094_RMO_OPC/safe094.c new file mode 100644 index 00000000000..d24a8399c71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_RMO_OPC/safe094.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe094_RMO_OPC/test.desc new file mode 100644 index 00000000000..d8f869045c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe094.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_RMO_OPT/safe094.c b/regression/goto-instrument-wmm-core/ppc_safe094_RMO_OPT/safe094.c new file mode 100644 index 00000000000..d24a8399c71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_RMO_OPT/safe094.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe094_RMO_OPT/test.desc new file mode 100644 index 00000000000..462d4f46c5b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe094.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_SC_SAFE/safe094.c b/regression/goto-instrument-wmm-core/ppc_safe094_SC_SAFE/safe094.c new file mode 100644 index 00000000000..d24a8399c71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_SC_SAFE/safe094.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe094_SC_SAFE/test.desc new file mode 100644 index 00000000000..0c569033bb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe094.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_TSO_ALL/safe094.c b/regression/goto-instrument-wmm-core/ppc_safe094_TSO_ALL/safe094.c new file mode 100644 index 00000000000..d24a8399c71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_TSO_ALL/safe094.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe094_TSO_ALL/test.desc new file mode 100644 index 00000000000..dc1a8703df6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe094.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_TSO_OPC/safe094.c b/regression/goto-instrument-wmm-core/ppc_safe094_TSO_OPC/safe094.c new file mode 100644 index 00000000000..d24a8399c71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_TSO_OPC/safe094.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe094_TSO_OPC/test.desc new file mode 100644 index 00000000000..673f0239f75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe094.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_TSO_OPT/safe094.c b/regression/goto-instrument-wmm-core/ppc_safe094_TSO_OPT/safe094.c new file mode 100644 index 00000000000..d24a8399c71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_TSO_OPT/safe094.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe094_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe094_TSO_OPT/test.desc new file mode 100644 index 00000000000..b37751f553f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe094_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe094.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_CAV11_ERROR/safe095.c b/regression/goto-instrument-wmm-core/ppc_safe095_CAV11_ERROR/safe095.c new file mode 100644 index 00000000000..3278705fd5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_CAV11_ERROR/safe095.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe095_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..74af9c9690f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe095.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_POWER_ALL/safe095.c b/regression/goto-instrument-wmm-core/ppc_safe095_POWER_ALL/safe095.c new file mode 100644 index 00000000000..3278705fd5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_POWER_ALL/safe095.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe095_POWER_ALL/test.desc new file mode 100644 index 00000000000..1b5b7de6fe1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe095.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_POWER_OPC/safe095.c b/regression/goto-instrument-wmm-core/ppc_safe095_POWER_OPC/safe095.c new file mode 100644 index 00000000000..3278705fd5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_POWER_OPC/safe095.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe095_POWER_OPC/test.desc new file mode 100644 index 00000000000..04473068ba4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe095.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_POWER_OPT/safe095.c b/regression/goto-instrument-wmm-core/ppc_safe095_POWER_OPT/safe095.c new file mode 100644 index 00000000000..3278705fd5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_POWER_OPT/safe095.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe095_POWER_OPT/test.desc new file mode 100644 index 00000000000..1bb042d4130 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe095.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_PSO_ALL/safe095.c b/regression/goto-instrument-wmm-core/ppc_safe095_PSO_ALL/safe095.c new file mode 100644 index 00000000000..3278705fd5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_PSO_ALL/safe095.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe095_PSO_ALL/test.desc new file mode 100644 index 00000000000..7140299af4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe095.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_PSO_OPC/safe095.c b/regression/goto-instrument-wmm-core/ppc_safe095_PSO_OPC/safe095.c new file mode 100644 index 00000000000..3278705fd5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_PSO_OPC/safe095.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe095_PSO_OPC/test.desc new file mode 100644 index 00000000000..c809faa6b58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe095.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_PSO_OPT/safe095.c b/regression/goto-instrument-wmm-core/ppc_safe095_PSO_OPT/safe095.c new file mode 100644 index 00000000000..3278705fd5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_PSO_OPT/safe095.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe095_PSO_OPT/test.desc new file mode 100644 index 00000000000..4e3022a839b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe095.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_RMO_ALL/safe095.c b/regression/goto-instrument-wmm-core/ppc_safe095_RMO_ALL/safe095.c new file mode 100644 index 00000000000..3278705fd5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_RMO_ALL/safe095.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe095_RMO_ALL/test.desc new file mode 100644 index 00000000000..9386055e92e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe095.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_RMO_OPC/safe095.c b/regression/goto-instrument-wmm-core/ppc_safe095_RMO_OPC/safe095.c new file mode 100644 index 00000000000..3278705fd5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_RMO_OPC/safe095.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe095_RMO_OPC/test.desc new file mode 100644 index 00000000000..63093b13505 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe095.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_RMO_OPT/safe095.c b/regression/goto-instrument-wmm-core/ppc_safe095_RMO_OPT/safe095.c new file mode 100644 index 00000000000..3278705fd5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_RMO_OPT/safe095.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe095_RMO_OPT/test.desc new file mode 100644 index 00000000000..7623eb5e240 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe095.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_SC_SAFE/safe095.c b/regression/goto-instrument-wmm-core/ppc_safe095_SC_SAFE/safe095.c new file mode 100644 index 00000000000..3278705fd5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_SC_SAFE/safe095.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe095_SC_SAFE/test.desc new file mode 100644 index 00000000000..cfd0e2e7135 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe095.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_TSO_ALL/safe095.c b/regression/goto-instrument-wmm-core/ppc_safe095_TSO_ALL/safe095.c new file mode 100644 index 00000000000..3278705fd5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_TSO_ALL/safe095.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe095_TSO_ALL/test.desc new file mode 100644 index 00000000000..915da10397d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe095.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_TSO_OPC/safe095.c b/regression/goto-instrument-wmm-core/ppc_safe095_TSO_OPC/safe095.c new file mode 100644 index 00000000000..3278705fd5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_TSO_OPC/safe095.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe095_TSO_OPC/test.desc new file mode 100644 index 00000000000..9640c7e3b32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe095.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_TSO_OPT/safe095.c b/regression/goto-instrument-wmm-core/ppc_safe095_TSO_OPT/safe095.c new file mode 100644 index 00000000000..3278705fd5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_TSO_OPT/safe095.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe095_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe095_TSO_OPT/test.desc new file mode 100644 index 00000000000..eb6f2ae586e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe095_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe095.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_CAV11_SAFE/safe096.c b/regression/goto-instrument-wmm-core/ppc_safe096_CAV11_SAFE/safe096.c new file mode 100644 index 00000000000..857913199a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_CAV11_SAFE/safe096.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe096_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..337c0e73a7a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe096.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_POWER_ALL/safe096.c b/regression/goto-instrument-wmm-core/ppc_safe096_POWER_ALL/safe096.c new file mode 100644 index 00000000000..857913199a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_POWER_ALL/safe096.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe096_POWER_ALL/test.desc new file mode 100644 index 00000000000..6ca7d39ff96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe096.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_POWER_OPC/safe096.c b/regression/goto-instrument-wmm-core/ppc_safe096_POWER_OPC/safe096.c new file mode 100644 index 00000000000..857913199a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_POWER_OPC/safe096.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe096_POWER_OPC/test.desc new file mode 100644 index 00000000000..0fffa82f765 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe096.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_POWER_OPT/safe096.c b/regression/goto-instrument-wmm-core/ppc_safe096_POWER_OPT/safe096.c new file mode 100644 index 00000000000..857913199a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_POWER_OPT/safe096.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe096_POWER_OPT/test.desc new file mode 100644 index 00000000000..18095f1309a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe096.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_PSO_ALL/safe096.c b/regression/goto-instrument-wmm-core/ppc_safe096_PSO_ALL/safe096.c new file mode 100644 index 00000000000..857913199a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_PSO_ALL/safe096.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe096_PSO_ALL/test.desc new file mode 100644 index 00000000000..4ed1357f7cc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe096.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_PSO_OPC/safe096.c b/regression/goto-instrument-wmm-core/ppc_safe096_PSO_OPC/safe096.c new file mode 100644 index 00000000000..857913199a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_PSO_OPC/safe096.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe096_PSO_OPC/test.desc new file mode 100644 index 00000000000..1f86119d3f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe096.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_PSO_OPT/safe096.c b/regression/goto-instrument-wmm-core/ppc_safe096_PSO_OPT/safe096.c new file mode 100644 index 00000000000..857913199a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_PSO_OPT/safe096.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe096_PSO_OPT/test.desc new file mode 100644 index 00000000000..a3edf15ff34 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe096.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_RMO_ALL/safe096.c b/regression/goto-instrument-wmm-core/ppc_safe096_RMO_ALL/safe096.c new file mode 100644 index 00000000000..857913199a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_RMO_ALL/safe096.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe096_RMO_ALL/test.desc new file mode 100644 index 00000000000..de72d880483 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe096.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_RMO_OPC/safe096.c b/regression/goto-instrument-wmm-core/ppc_safe096_RMO_OPC/safe096.c new file mode 100644 index 00000000000..857913199a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_RMO_OPC/safe096.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe096_RMO_OPC/test.desc new file mode 100644 index 00000000000..0c2837af37a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe096.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_RMO_OPT/safe096.c b/regression/goto-instrument-wmm-core/ppc_safe096_RMO_OPT/safe096.c new file mode 100644 index 00000000000..857913199a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_RMO_OPT/safe096.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe096_RMO_OPT/test.desc new file mode 100644 index 00000000000..af2d9a80a48 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe096.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_SC_SAFE/safe096.c b/regression/goto-instrument-wmm-core/ppc_safe096_SC_SAFE/safe096.c new file mode 100644 index 00000000000..857913199a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_SC_SAFE/safe096.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe096_SC_SAFE/test.desc new file mode 100644 index 00000000000..eac6a133b58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe096.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_TSO_ALL/safe096.c b/regression/goto-instrument-wmm-core/ppc_safe096_TSO_ALL/safe096.c new file mode 100644 index 00000000000..857913199a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_TSO_ALL/safe096.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe096_TSO_ALL/test.desc new file mode 100644 index 00000000000..6c099a93877 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe096.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_TSO_OPC/safe096.c b/regression/goto-instrument-wmm-core/ppc_safe096_TSO_OPC/safe096.c new file mode 100644 index 00000000000..857913199a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_TSO_OPC/safe096.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe096_TSO_OPC/test.desc new file mode 100644 index 00000000000..e2f7294b804 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe096.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_TSO_OPT/safe096.c b/regression/goto-instrument-wmm-core/ppc_safe096_TSO_OPT/safe096.c new file mode 100644 index 00000000000..857913199a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_TSO_OPT/safe096.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe096_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe096_TSO_OPT/test.desc new file mode 100644 index 00000000000..b109a53c1d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe096_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe096.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_CAV11_ERROR/safe097.c b/regression/goto-instrument-wmm-core/ppc_safe097_CAV11_ERROR/safe097.c new file mode 100644 index 00000000000..a0694b683e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_CAV11_ERROR/safe097.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe097_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..5dbeb7c7bce --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe097.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_POWER_ALL/safe097.c b/regression/goto-instrument-wmm-core/ppc_safe097_POWER_ALL/safe097.c new file mode 100644 index 00000000000..a0694b683e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_POWER_ALL/safe097.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe097_POWER_ALL/test.desc new file mode 100644 index 00000000000..2761bbba82b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe097.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_POWER_OPC/safe097.c b/regression/goto-instrument-wmm-core/ppc_safe097_POWER_OPC/safe097.c new file mode 100644 index 00000000000..a0694b683e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_POWER_OPC/safe097.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe097_POWER_OPC/test.desc new file mode 100644 index 00000000000..da3bf41b31d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe097.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_POWER_OPT/safe097.c b/regression/goto-instrument-wmm-core/ppc_safe097_POWER_OPT/safe097.c new file mode 100644 index 00000000000..a0694b683e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_POWER_OPT/safe097.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe097_POWER_OPT/test.desc new file mode 100644 index 00000000000..5acacdceb08 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe097.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_PSO_ALL/safe097.c b/regression/goto-instrument-wmm-core/ppc_safe097_PSO_ALL/safe097.c new file mode 100644 index 00000000000..a0694b683e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_PSO_ALL/safe097.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe097_PSO_ALL/test.desc new file mode 100644 index 00000000000..c2f226b2fc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe097.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_PSO_OPC/safe097.c b/regression/goto-instrument-wmm-core/ppc_safe097_PSO_OPC/safe097.c new file mode 100644 index 00000000000..a0694b683e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_PSO_OPC/safe097.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe097_PSO_OPC/test.desc new file mode 100644 index 00000000000..34d53920be4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe097.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_PSO_OPT/safe097.c b/regression/goto-instrument-wmm-core/ppc_safe097_PSO_OPT/safe097.c new file mode 100644 index 00000000000..a0694b683e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_PSO_OPT/safe097.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe097_PSO_OPT/test.desc new file mode 100644 index 00000000000..3a4cfd0645c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe097.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_RMO_ALL/safe097.c b/regression/goto-instrument-wmm-core/ppc_safe097_RMO_ALL/safe097.c new file mode 100644 index 00000000000..a0694b683e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_RMO_ALL/safe097.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe097_RMO_ALL/test.desc new file mode 100644 index 00000000000..42cca7ffb62 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe097.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_RMO_OPC/safe097.c b/regression/goto-instrument-wmm-core/ppc_safe097_RMO_OPC/safe097.c new file mode 100644 index 00000000000..a0694b683e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_RMO_OPC/safe097.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe097_RMO_OPC/test.desc new file mode 100644 index 00000000000..faba3cb73da --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe097.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_RMO_OPT/safe097.c b/regression/goto-instrument-wmm-core/ppc_safe097_RMO_OPT/safe097.c new file mode 100644 index 00000000000..a0694b683e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_RMO_OPT/safe097.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe097_RMO_OPT/test.desc new file mode 100644 index 00000000000..6003381644e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe097.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_SC_SAFE/safe097.c b/regression/goto-instrument-wmm-core/ppc_safe097_SC_SAFE/safe097.c new file mode 100644 index 00000000000..a0694b683e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_SC_SAFE/safe097.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe097_SC_SAFE/test.desc new file mode 100644 index 00000000000..6f67b5ec51f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe097.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_TSO_ALL/safe097.c b/regression/goto-instrument-wmm-core/ppc_safe097_TSO_ALL/safe097.c new file mode 100644 index 00000000000..a0694b683e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_TSO_ALL/safe097.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe097_TSO_ALL/test.desc new file mode 100644 index 00000000000..709847e05c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe097.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_TSO_OPC/safe097.c b/regression/goto-instrument-wmm-core/ppc_safe097_TSO_OPC/safe097.c new file mode 100644 index 00000000000..a0694b683e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_TSO_OPC/safe097.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe097_TSO_OPC/test.desc new file mode 100644 index 00000000000..1ac9e96ddd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe097.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_TSO_OPT/safe097.c b/regression/goto-instrument-wmm-core/ppc_safe097_TSO_OPT/safe097.c new file mode 100644 index 00000000000..a0694b683e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_TSO_OPT/safe097.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = 2; + y = __unbuffered_p1_r1; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r3 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe097_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe097_TSO_OPT/test.desc new file mode 100644 index 00000000000..1f4060e230a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe097_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe097.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_CAV11_SAFE/safe098.c b/regression/goto-instrument-wmm-core/ppc_safe098_CAV11_SAFE/safe098.c new file mode 100644 index 00000000000..cd9be0dc9bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_CAV11_SAFE/safe098.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe098_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..f70cc025dd1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe098.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_POWER_ALL/safe098.c b/regression/goto-instrument-wmm-core/ppc_safe098_POWER_ALL/safe098.c new file mode 100644 index 00000000000..cd9be0dc9bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_POWER_ALL/safe098.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe098_POWER_ALL/test.desc new file mode 100644 index 00000000000..68905727e1c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe098.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_POWER_OPC/safe098.c b/regression/goto-instrument-wmm-core/ppc_safe098_POWER_OPC/safe098.c new file mode 100644 index 00000000000..cd9be0dc9bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_POWER_OPC/safe098.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe098_POWER_OPC/test.desc new file mode 100644 index 00000000000..008da950336 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe098.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_POWER_OPT/safe098.c b/regression/goto-instrument-wmm-core/ppc_safe098_POWER_OPT/safe098.c new file mode 100644 index 00000000000..cd9be0dc9bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_POWER_OPT/safe098.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe098_POWER_OPT/test.desc new file mode 100644 index 00000000000..b2e79d28dd9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe098.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_PSO_ALL/safe098.c b/regression/goto-instrument-wmm-core/ppc_safe098_PSO_ALL/safe098.c new file mode 100644 index 00000000000..cd9be0dc9bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_PSO_ALL/safe098.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe098_PSO_ALL/test.desc new file mode 100644 index 00000000000..a578df3b1b6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe098.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_PSO_OPC/safe098.c b/regression/goto-instrument-wmm-core/ppc_safe098_PSO_OPC/safe098.c new file mode 100644 index 00000000000..cd9be0dc9bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_PSO_OPC/safe098.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe098_PSO_OPC/test.desc new file mode 100644 index 00000000000..e8d1c276e72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe098.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_PSO_OPT/safe098.c b/regression/goto-instrument-wmm-core/ppc_safe098_PSO_OPT/safe098.c new file mode 100644 index 00000000000..cd9be0dc9bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_PSO_OPT/safe098.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe098_PSO_OPT/test.desc new file mode 100644 index 00000000000..1cee814f8be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe098.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_RMO_ALL/safe098.c b/regression/goto-instrument-wmm-core/ppc_safe098_RMO_ALL/safe098.c new file mode 100644 index 00000000000..cd9be0dc9bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_RMO_ALL/safe098.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe098_RMO_ALL/test.desc new file mode 100644 index 00000000000..849246f9b42 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe098.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_RMO_OPC/safe098.c b/regression/goto-instrument-wmm-core/ppc_safe098_RMO_OPC/safe098.c new file mode 100644 index 00000000000..cd9be0dc9bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_RMO_OPC/safe098.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe098_RMO_OPC/test.desc new file mode 100644 index 00000000000..75f52c7b7d1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe098.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_RMO_OPT/safe098.c b/regression/goto-instrument-wmm-core/ppc_safe098_RMO_OPT/safe098.c new file mode 100644 index 00000000000..cd9be0dc9bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_RMO_OPT/safe098.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe098_RMO_OPT/test.desc new file mode 100644 index 00000000000..7399db33964 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe098.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_SC_SAFE/safe098.c b/regression/goto-instrument-wmm-core/ppc_safe098_SC_SAFE/safe098.c new file mode 100644 index 00000000000..cd9be0dc9bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_SC_SAFE/safe098.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe098_SC_SAFE/test.desc new file mode 100644 index 00000000000..e77fb20c143 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe098.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_TSO_ALL/safe098.c b/regression/goto-instrument-wmm-core/ppc_safe098_TSO_ALL/safe098.c new file mode 100644 index 00000000000..cd9be0dc9bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_TSO_ALL/safe098.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe098_TSO_ALL/test.desc new file mode 100644 index 00000000000..a8d75c9fa46 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe098.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_TSO_OPC/safe098.c b/regression/goto-instrument-wmm-core/ppc_safe098_TSO_OPC/safe098.c new file mode 100644 index 00000000000..cd9be0dc9bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_TSO_OPC/safe098.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe098_TSO_OPC/test.desc new file mode 100644 index 00000000000..01e5c9f3a0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe098.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_TSO_OPT/safe098.c b/regression/goto-instrument-wmm-core/ppc_safe098_TSO_OPT/safe098.c new file mode 100644 index 00000000000..cd9be0dc9bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_TSO_OPT/safe098.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe098_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe098_TSO_OPT/test.desc new file mode 100644 index 00000000000..700d3ff8557 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe098_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe098.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_CAV11_SAFE/safe099.c b/regression/goto-instrument-wmm-core/ppc_safe099_CAV11_SAFE/safe099.c new file mode 100644 index 00000000000..03d290fec77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_CAV11_SAFE/safe099.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe099_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..565c4827158 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe099.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_POWER_ALL/safe099.c b/regression/goto-instrument-wmm-core/ppc_safe099_POWER_ALL/safe099.c new file mode 100644 index 00000000000..03d290fec77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_POWER_ALL/safe099.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe099_POWER_ALL/test.desc new file mode 100644 index 00000000000..1ef910aec94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe099.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_POWER_OPC/safe099.c b/regression/goto-instrument-wmm-core/ppc_safe099_POWER_OPC/safe099.c new file mode 100644 index 00000000000..03d290fec77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_POWER_OPC/safe099.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe099_POWER_OPC/test.desc new file mode 100644 index 00000000000..62239a1d03f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe099.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_POWER_OPT/safe099.c b/regression/goto-instrument-wmm-core/ppc_safe099_POWER_OPT/safe099.c new file mode 100644 index 00000000000..03d290fec77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_POWER_OPT/safe099.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe099_POWER_OPT/test.desc new file mode 100644 index 00000000000..990e097ec3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe099.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_PSO_ALL/safe099.c b/regression/goto-instrument-wmm-core/ppc_safe099_PSO_ALL/safe099.c new file mode 100644 index 00000000000..03d290fec77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_PSO_ALL/safe099.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe099_PSO_ALL/test.desc new file mode 100644 index 00000000000..5ba533df4ab --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe099.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_PSO_OPC/safe099.c b/regression/goto-instrument-wmm-core/ppc_safe099_PSO_OPC/safe099.c new file mode 100644 index 00000000000..03d290fec77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_PSO_OPC/safe099.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe099_PSO_OPC/test.desc new file mode 100644 index 00000000000..2dfd237b8e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe099.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_PSO_OPT/safe099.c b/regression/goto-instrument-wmm-core/ppc_safe099_PSO_OPT/safe099.c new file mode 100644 index 00000000000..03d290fec77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_PSO_OPT/safe099.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe099_PSO_OPT/test.desc new file mode 100644 index 00000000000..3d6aedd4c48 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe099.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_RMO_ALL/safe099.c b/regression/goto-instrument-wmm-core/ppc_safe099_RMO_ALL/safe099.c new file mode 100644 index 00000000000..03d290fec77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_RMO_ALL/safe099.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe099_RMO_ALL/test.desc new file mode 100644 index 00000000000..a433a8d1df5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe099.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_RMO_OPC/safe099.c b/regression/goto-instrument-wmm-core/ppc_safe099_RMO_OPC/safe099.c new file mode 100644 index 00000000000..03d290fec77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_RMO_OPC/safe099.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe099_RMO_OPC/test.desc new file mode 100644 index 00000000000..3679f9a85df --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe099.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_RMO_OPT/safe099.c b/regression/goto-instrument-wmm-core/ppc_safe099_RMO_OPT/safe099.c new file mode 100644 index 00000000000..03d290fec77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_RMO_OPT/safe099.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe099_RMO_OPT/test.desc new file mode 100644 index 00000000000..0b2dbe24d32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe099.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_SC_SAFE/safe099.c b/regression/goto-instrument-wmm-core/ppc_safe099_SC_SAFE/safe099.c new file mode 100644 index 00000000000..03d290fec77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_SC_SAFE/safe099.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe099_SC_SAFE/test.desc new file mode 100644 index 00000000000..c6ee8efda55 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe099.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_TSO_ALL/safe099.c b/regression/goto-instrument-wmm-core/ppc_safe099_TSO_ALL/safe099.c new file mode 100644 index 00000000000..03d290fec77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_TSO_ALL/safe099.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe099_TSO_ALL/test.desc new file mode 100644 index 00000000000..4e1fbad1cc4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe099.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_TSO_OPC/safe099.c b/regression/goto-instrument-wmm-core/ppc_safe099_TSO_OPC/safe099.c new file mode 100644 index 00000000000..03d290fec77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_TSO_OPC/safe099.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe099_TSO_OPC/test.desc new file mode 100644 index 00000000000..3d3f8ed3ec0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe099.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_TSO_OPT/safe099.c b/regression/goto-instrument-wmm-core/ppc_safe099_TSO_OPT/safe099.c new file mode 100644 index 00000000000..03d290fec77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_TSO_OPT/safe099.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe099_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe099_TSO_OPT/test.desc new file mode 100644 index 00000000000..f106fd1a3fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe099_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe099.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_CAV11_ERROR/safe100.c b/regression/goto-instrument-wmm-core/ppc_safe100_CAV11_ERROR/safe100.c new file mode 100644 index 00000000000..cd96f181cff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_CAV11_ERROR/safe100.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe100_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..67516401991 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe100.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_POWER_ALL/safe100.c b/regression/goto-instrument-wmm-core/ppc_safe100_POWER_ALL/safe100.c new file mode 100644 index 00000000000..cd96f181cff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_POWER_ALL/safe100.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe100_POWER_ALL/test.desc new file mode 100644 index 00000000000..1c98633a633 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe100.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_POWER_OPC/safe100.c b/regression/goto-instrument-wmm-core/ppc_safe100_POWER_OPC/safe100.c new file mode 100644 index 00000000000..cd96f181cff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_POWER_OPC/safe100.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe100_POWER_OPC/test.desc new file mode 100644 index 00000000000..2f6ad5310cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe100.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe100_POWER_OPT/test.desc index c7127543662..42e922854b1 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe100_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe100_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe100.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_PSO_ALL/safe100.c b/regression/goto-instrument-wmm-core/ppc_safe100_PSO_ALL/safe100.c new file mode 100644 index 00000000000..cd96f181cff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_PSO_ALL/safe100.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe100_PSO_ALL/test.desc new file mode 100644 index 00000000000..6178ee223e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe100.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_PSO_OPC/safe100.c b/regression/goto-instrument-wmm-core/ppc_safe100_PSO_OPC/safe100.c new file mode 100644 index 00000000000..cd96f181cff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_PSO_OPC/safe100.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe100_PSO_OPC/test.desc new file mode 100644 index 00000000000..8de9be5a752 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe100.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_PSO_OPT/safe100.c b/regression/goto-instrument-wmm-core/ppc_safe100_PSO_OPT/safe100.c new file mode 100644 index 00000000000..cd96f181cff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_PSO_OPT/safe100.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe100_PSO_OPT/test.desc new file mode 100644 index 00000000000..569f55376f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe100.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_RMO_ALL/safe100.c b/regression/goto-instrument-wmm-core/ppc_safe100_RMO_ALL/safe100.c new file mode 100644 index 00000000000..cd96f181cff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_RMO_ALL/safe100.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe100_RMO_ALL/test.desc new file mode 100644 index 00000000000..1c69cf50083 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe100.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_RMO_OPC/safe100.c b/regression/goto-instrument-wmm-core/ppc_safe100_RMO_OPC/safe100.c new file mode 100644 index 00000000000..cd96f181cff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_RMO_OPC/safe100.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe100_RMO_OPC/test.desc new file mode 100644 index 00000000000..eaccb4fec73 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe100.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_RMO_OPT/safe100.c b/regression/goto-instrument-wmm-core/ppc_safe100_RMO_OPT/safe100.c new file mode 100644 index 00000000000..cd96f181cff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_RMO_OPT/safe100.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe100_RMO_OPT/test.desc new file mode 100644 index 00000000000..387747f9f44 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe100.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_SC_SAFE/safe100.c b/regression/goto-instrument-wmm-core/ppc_safe100_SC_SAFE/safe100.c new file mode 100644 index 00000000000..cd96f181cff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_SC_SAFE/safe100.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe100_SC_SAFE/test.desc new file mode 100644 index 00000000000..b48de62e349 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe100.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_TSO_ALL/safe100.c b/regression/goto-instrument-wmm-core/ppc_safe100_TSO_ALL/safe100.c new file mode 100644 index 00000000000..cd96f181cff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_TSO_ALL/safe100.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe100_TSO_ALL/test.desc new file mode 100644 index 00000000000..ad22ff35b60 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe100.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_TSO_OPC/safe100.c b/regression/goto-instrument-wmm-core/ppc_safe100_TSO_OPC/safe100.c new file mode 100644 index 00000000000..cd96f181cff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_TSO_OPC/safe100.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe100_TSO_OPC/test.desc new file mode 100644 index 00000000000..253c380e776 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe100.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_TSO_OPT/safe100.c b/regression/goto-instrument-wmm-core/ppc_safe100_TSO_OPT/safe100.c new file mode 100644 index 00000000000..cd96f181cff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_TSO_OPT/safe100.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe100_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe100_TSO_OPT/test.desc new file mode 100644 index 00000000000..907be5c38b5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe100_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe100.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_CAV11_ERROR/safe101.c b/regression/goto-instrument-wmm-core/ppc_safe101_CAV11_ERROR/safe101.c new file mode 100644 index 00000000000..3ab381f16fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_CAV11_ERROR/safe101.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe101_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..afe49b8fb21 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe101.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_POWER_ALL/safe101.c b/regression/goto-instrument-wmm-core/ppc_safe101_POWER_ALL/safe101.c new file mode 100644 index 00000000000..3ab381f16fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_POWER_ALL/safe101.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe101_POWER_ALL/test.desc new file mode 100644 index 00000000000..edd0150d874 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe101.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_POWER_OPC/safe101.c b/regression/goto-instrument-wmm-core/ppc_safe101_POWER_OPC/safe101.c new file mode 100644 index 00000000000..3ab381f16fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_POWER_OPC/safe101.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe101_POWER_OPC/test.desc new file mode 100644 index 00000000000..e4989da2a01 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe101.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_POWER_OPT/safe101.c b/regression/goto-instrument-wmm-core/ppc_safe101_POWER_OPT/safe101.c new file mode 100644 index 00000000000..3ab381f16fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_POWER_OPT/safe101.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe101_POWER_OPT/test.desc new file mode 100644 index 00000000000..b6b83d44de3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe101.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_PSO_ALL/safe101.c b/regression/goto-instrument-wmm-core/ppc_safe101_PSO_ALL/safe101.c new file mode 100644 index 00000000000..3ab381f16fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_PSO_ALL/safe101.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe101_PSO_ALL/test.desc new file mode 100644 index 00000000000..0530d611b6c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe101.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_PSO_OPC/safe101.c b/regression/goto-instrument-wmm-core/ppc_safe101_PSO_OPC/safe101.c new file mode 100644 index 00000000000..3ab381f16fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_PSO_OPC/safe101.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe101_PSO_OPC/test.desc new file mode 100644 index 00000000000..f4894d715f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe101.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_PSO_OPT/safe101.c b/regression/goto-instrument-wmm-core/ppc_safe101_PSO_OPT/safe101.c new file mode 100644 index 00000000000..3ab381f16fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_PSO_OPT/safe101.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe101_PSO_OPT/test.desc new file mode 100644 index 00000000000..8a0c879fb32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe101.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_RMO_ALL/safe101.c b/regression/goto-instrument-wmm-core/ppc_safe101_RMO_ALL/safe101.c new file mode 100644 index 00000000000..3ab381f16fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_RMO_ALL/safe101.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe101_RMO_ALL/test.desc new file mode 100644 index 00000000000..e149f0e5cd1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe101.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_RMO_OPC/safe101.c b/regression/goto-instrument-wmm-core/ppc_safe101_RMO_OPC/safe101.c new file mode 100644 index 00000000000..3ab381f16fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_RMO_OPC/safe101.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe101_RMO_OPC/test.desc new file mode 100644 index 00000000000..32abb9ee8e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe101.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_RMO_OPT/safe101.c b/regression/goto-instrument-wmm-core/ppc_safe101_RMO_OPT/safe101.c new file mode 100644 index 00000000000..3ab381f16fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_RMO_OPT/safe101.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe101_RMO_OPT/test.desc new file mode 100644 index 00000000000..63e551b3169 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe101.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_SC_SAFE/safe101.c b/regression/goto-instrument-wmm-core/ppc_safe101_SC_SAFE/safe101.c new file mode 100644 index 00000000000..3ab381f16fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_SC_SAFE/safe101.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe101_SC_SAFE/test.desc new file mode 100644 index 00000000000..76a1f3f51b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe101.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_TSO_ALL/safe101.c b/regression/goto-instrument-wmm-core/ppc_safe101_TSO_ALL/safe101.c new file mode 100644 index 00000000000..3ab381f16fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_TSO_ALL/safe101.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe101_TSO_ALL/test.desc new file mode 100644 index 00000000000..8005ef7e404 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe101.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_TSO_OPC/safe101.c b/regression/goto-instrument-wmm-core/ppc_safe101_TSO_OPC/safe101.c new file mode 100644 index 00000000000..3ab381f16fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_TSO_OPC/safe101.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe101_TSO_OPC/test.desc new file mode 100644 index 00000000000..90c9dfbae43 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe101.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_TSO_OPT/safe101.c b/regression/goto-instrument-wmm-core/ppc_safe101_TSO_OPT/safe101.c new file mode 100644 index 00000000000..3ab381f16fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_TSO_OPT/safe101.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + y = __unbuffered_p2_r1; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe101_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe101_TSO_OPT/test.desc new file mode 100644 index 00000000000..b700116c35a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe101_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe101.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_CAV11_ERROR/safe102.c b/regression/goto-instrument-wmm-core/ppc_safe102_CAV11_ERROR/safe102.c new file mode 100644 index 00000000000..c92425f68d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_CAV11_ERROR/safe102.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe102_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..b340b52f00b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe102.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_POWER_ALL/safe102.c b/regression/goto-instrument-wmm-core/ppc_safe102_POWER_ALL/safe102.c new file mode 100644 index 00000000000..c92425f68d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_POWER_ALL/safe102.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe102_POWER_ALL/test.desc new file mode 100644 index 00000000000..bfa9fb1f606 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe102.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_POWER_OPC/safe102.c b/regression/goto-instrument-wmm-core/ppc_safe102_POWER_OPC/safe102.c new file mode 100644 index 00000000000..c92425f68d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_POWER_OPC/safe102.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe102_POWER_OPC/test.desc new file mode 100644 index 00000000000..86f5e5a8712 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe102.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe102_POWER_OPT/test.desc index df5f128fe4d..f01cf65042c 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe102_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe102_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe102.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_PSO_ALL/safe102.c b/regression/goto-instrument-wmm-core/ppc_safe102_PSO_ALL/safe102.c new file mode 100644 index 00000000000..c92425f68d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_PSO_ALL/safe102.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe102_PSO_ALL/test.desc new file mode 100644 index 00000000000..6fba03658d1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe102.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_PSO_OPC/safe102.c b/regression/goto-instrument-wmm-core/ppc_safe102_PSO_OPC/safe102.c new file mode 100644 index 00000000000..c92425f68d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_PSO_OPC/safe102.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe102_PSO_OPC/test.desc new file mode 100644 index 00000000000..5cebc6beb6f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe102.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_PSO_OPT/safe102.c b/regression/goto-instrument-wmm-core/ppc_safe102_PSO_OPT/safe102.c new file mode 100644 index 00000000000..c92425f68d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_PSO_OPT/safe102.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe102_PSO_OPT/test.desc new file mode 100644 index 00000000000..390f7059b25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe102.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_RMO_ALL/safe102.c b/regression/goto-instrument-wmm-core/ppc_safe102_RMO_ALL/safe102.c new file mode 100644 index 00000000000..c92425f68d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_RMO_ALL/safe102.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe102_RMO_ALL/test.desc new file mode 100644 index 00000000000..6e5f17e929b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe102.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_RMO_OPC/safe102.c b/regression/goto-instrument-wmm-core/ppc_safe102_RMO_OPC/safe102.c new file mode 100644 index 00000000000..c92425f68d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_RMO_OPC/safe102.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe102_RMO_OPC/test.desc new file mode 100644 index 00000000000..51b4a124ced --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe102.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_RMO_OPT/safe102.c b/regression/goto-instrument-wmm-core/ppc_safe102_RMO_OPT/safe102.c new file mode 100644 index 00000000000..c92425f68d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_RMO_OPT/safe102.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe102_RMO_OPT/test.desc new file mode 100644 index 00000000000..bd6c31e2014 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe102.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_SC_SAFE/safe102.c b/regression/goto-instrument-wmm-core/ppc_safe102_SC_SAFE/safe102.c new file mode 100644 index 00000000000..c92425f68d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_SC_SAFE/safe102.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe102_SC_SAFE/test.desc new file mode 100644 index 00000000000..bd9d5edb290 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe102.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_TSO_ALL/safe102.c b/regression/goto-instrument-wmm-core/ppc_safe102_TSO_ALL/safe102.c new file mode 100644 index 00000000000..c92425f68d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_TSO_ALL/safe102.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe102_TSO_ALL/test.desc new file mode 100644 index 00000000000..9e4ad76f048 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe102.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_TSO_OPC/safe102.c b/regression/goto-instrument-wmm-core/ppc_safe102_TSO_OPC/safe102.c new file mode 100644 index 00000000000..c92425f68d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_TSO_OPC/safe102.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe102_TSO_OPC/test.desc new file mode 100644 index 00000000000..0baca51c354 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe102.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_TSO_OPT/safe102.c b/regression/goto-instrument-wmm-core/ppc_safe102_TSO_OPT/safe102.c new file mode 100644 index 00000000000..c92425f68d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_TSO_OPT/safe102.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe102_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe102_TSO_OPT/test.desc new file mode 100644 index 00000000000..2e7c489674b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe102_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe102.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_CAV11_ERROR/safe103.c b/regression/goto-instrument-wmm-core/ppc_safe103_CAV11_ERROR/safe103.c new file mode 100644 index 00000000000..55f21d15ded --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_CAV11_ERROR/safe103.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe103_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..6c30e840b40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe103.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_POWER_ALL/safe103.c b/regression/goto-instrument-wmm-core/ppc_safe103_POWER_ALL/safe103.c new file mode 100644 index 00000000000..55f21d15ded --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_POWER_ALL/safe103.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe103_POWER_ALL/test.desc new file mode 100644 index 00000000000..230f94dd927 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe103.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_POWER_OPC/safe103.c b/regression/goto-instrument-wmm-core/ppc_safe103_POWER_OPC/safe103.c new file mode 100644 index 00000000000..55f21d15ded --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_POWER_OPC/safe103.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe103_POWER_OPC/test.desc new file mode 100644 index 00000000000..f381fe624ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe103.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_POWER_OPT/safe103.c b/regression/goto-instrument-wmm-core/ppc_safe103_POWER_OPT/safe103.c new file mode 100644 index 00000000000..55f21d15ded --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_POWER_OPT/safe103.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe103_POWER_OPT/test.desc new file mode 100644 index 00000000000..bbbd4a5b907 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe103.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_PSO_ALL/safe103.c b/regression/goto-instrument-wmm-core/ppc_safe103_PSO_ALL/safe103.c new file mode 100644 index 00000000000..55f21d15ded --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_PSO_ALL/safe103.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe103_PSO_ALL/test.desc new file mode 100644 index 00000000000..d532dde5801 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe103.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_PSO_OPC/safe103.c b/regression/goto-instrument-wmm-core/ppc_safe103_PSO_OPC/safe103.c new file mode 100644 index 00000000000..55f21d15ded --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_PSO_OPC/safe103.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe103_PSO_OPC/test.desc new file mode 100644 index 00000000000..0513d9033c5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe103.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_PSO_OPT/safe103.c b/regression/goto-instrument-wmm-core/ppc_safe103_PSO_OPT/safe103.c new file mode 100644 index 00000000000..55f21d15ded --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_PSO_OPT/safe103.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe103_PSO_OPT/test.desc new file mode 100644 index 00000000000..e70f9b0f087 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe103.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_RMO_ALL/safe103.c b/regression/goto-instrument-wmm-core/ppc_safe103_RMO_ALL/safe103.c new file mode 100644 index 00000000000..55f21d15ded --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_RMO_ALL/safe103.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe103_RMO_ALL/test.desc new file mode 100644 index 00000000000..f960afb9d4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe103.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_RMO_OPC/safe103.c b/regression/goto-instrument-wmm-core/ppc_safe103_RMO_OPC/safe103.c new file mode 100644 index 00000000000..55f21d15ded --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_RMO_OPC/safe103.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe103_RMO_OPC/test.desc new file mode 100644 index 00000000000..4254bacaa07 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe103.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_RMO_OPT/safe103.c b/regression/goto-instrument-wmm-core/ppc_safe103_RMO_OPT/safe103.c new file mode 100644 index 00000000000..55f21d15ded --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_RMO_OPT/safe103.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe103_RMO_OPT/test.desc new file mode 100644 index 00000000000..4ea50fb9b8b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe103.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_SC_SAFE/safe103.c b/regression/goto-instrument-wmm-core/ppc_safe103_SC_SAFE/safe103.c new file mode 100644 index 00000000000..55f21d15ded --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_SC_SAFE/safe103.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe103_SC_SAFE/test.desc new file mode 100644 index 00000000000..3a3ed42593e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe103.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_TSO_ALL/safe103.c b/regression/goto-instrument-wmm-core/ppc_safe103_TSO_ALL/safe103.c new file mode 100644 index 00000000000..55f21d15ded --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_TSO_ALL/safe103.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe103_TSO_ALL/test.desc new file mode 100644 index 00000000000..a8e834c04f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe103.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_TSO_OPC/safe103.c b/regression/goto-instrument-wmm-core/ppc_safe103_TSO_OPC/safe103.c new file mode 100644 index 00000000000..55f21d15ded --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_TSO_OPC/safe103.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe103_TSO_OPC/test.desc new file mode 100644 index 00000000000..43d06889e61 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe103.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_TSO_OPT/safe103.c b/regression/goto-instrument-wmm-core/ppc_safe103_TSO_OPT/safe103.c new file mode 100644 index 00000000000..55f21d15ded --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_TSO_OPT/safe103.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe103_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe103_TSO_OPT/test.desc new file mode 100644 index 00000000000..4f7234ec4ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe103_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe103.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_CAV11_SAFE/safe104.c b/regression/goto-instrument-wmm-core/ppc_safe104_CAV11_SAFE/safe104.c new file mode 100644 index 00000000000..0cfd27eed77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_CAV11_SAFE/safe104.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe104_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..f82ee1f2f21 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe104.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_POWER_ALL/safe104.c b/regression/goto-instrument-wmm-core/ppc_safe104_POWER_ALL/safe104.c new file mode 100644 index 00000000000..0cfd27eed77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_POWER_ALL/safe104.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe104_POWER_ALL/test.desc new file mode 100644 index 00000000000..024216db6e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe104.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_POWER_OPC/safe104.c b/regression/goto-instrument-wmm-core/ppc_safe104_POWER_OPC/safe104.c new file mode 100644 index 00000000000..0cfd27eed77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_POWER_OPC/safe104.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe104_POWER_OPC/test.desc new file mode 100644 index 00000000000..55451caa3be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe104.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe104_POWER_OPT/test.desc index f85ad91d24c..92713891917 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe104_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe104_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe104.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_PSO_ALL/safe104.c b/regression/goto-instrument-wmm-core/ppc_safe104_PSO_ALL/safe104.c new file mode 100644 index 00000000000..0cfd27eed77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_PSO_ALL/safe104.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe104_PSO_ALL/test.desc new file mode 100644 index 00000000000..d05c5c31661 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe104.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_PSO_OPC/safe104.c b/regression/goto-instrument-wmm-core/ppc_safe104_PSO_OPC/safe104.c new file mode 100644 index 00000000000..0cfd27eed77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_PSO_OPC/safe104.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe104_PSO_OPC/test.desc new file mode 100644 index 00000000000..763ddd79033 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe104.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_PSO_OPT/safe104.c b/regression/goto-instrument-wmm-core/ppc_safe104_PSO_OPT/safe104.c new file mode 100644 index 00000000000..0cfd27eed77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_PSO_OPT/safe104.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe104_PSO_OPT/test.desc new file mode 100644 index 00000000000..cf09e45e12e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe104.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_RMO_ALL/safe104.c b/regression/goto-instrument-wmm-core/ppc_safe104_RMO_ALL/safe104.c new file mode 100644 index 00000000000..0cfd27eed77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_RMO_ALL/safe104.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe104_RMO_ALL/test.desc new file mode 100644 index 00000000000..ddde48c5bf0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe104.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_RMO_OPC/safe104.c b/regression/goto-instrument-wmm-core/ppc_safe104_RMO_OPC/safe104.c new file mode 100644 index 00000000000..0cfd27eed77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_RMO_OPC/safe104.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe104_RMO_OPC/test.desc new file mode 100644 index 00000000000..e6317cc2b33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe104.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_RMO_OPT/safe104.c b/regression/goto-instrument-wmm-core/ppc_safe104_RMO_OPT/safe104.c new file mode 100644 index 00000000000..0cfd27eed77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_RMO_OPT/safe104.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe104_RMO_OPT/test.desc new file mode 100644 index 00000000000..e96911d73fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe104.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_SC_SAFE/safe104.c b/regression/goto-instrument-wmm-core/ppc_safe104_SC_SAFE/safe104.c new file mode 100644 index 00000000000..0cfd27eed77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_SC_SAFE/safe104.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe104_SC_SAFE/test.desc new file mode 100644 index 00000000000..e7934d13644 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe104.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_TSO_ALL/safe104.c b/regression/goto-instrument-wmm-core/ppc_safe104_TSO_ALL/safe104.c new file mode 100644 index 00000000000..0cfd27eed77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_TSO_ALL/safe104.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe104_TSO_ALL/test.desc new file mode 100644 index 00000000000..c6a4a3dbad7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe104.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_TSO_OPC/safe104.c b/regression/goto-instrument-wmm-core/ppc_safe104_TSO_OPC/safe104.c new file mode 100644 index 00000000000..0cfd27eed77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_TSO_OPC/safe104.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe104_TSO_OPC/test.desc new file mode 100644 index 00000000000..5e2c5936936 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe104.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_TSO_OPT/safe104.c b/regression/goto-instrument-wmm-core/ppc_safe104_TSO_OPT/safe104.c new file mode 100644 index 00000000000..0cfd27eed77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_TSO_OPT/safe104.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe104_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe104_TSO_OPT/test.desc new file mode 100644 index 00000000000..4c2d8f1fe8f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe104_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe104.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_CAV11_SAFE/safe105.c b/regression/goto-instrument-wmm-core/ppc_safe105_CAV11_SAFE/safe105.c new file mode 100644 index 00000000000..b6a69d5cbe5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_CAV11_SAFE/safe105.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe105_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..beabef92b3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe105.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_POWER_ALL/safe105.c b/regression/goto-instrument-wmm-core/ppc_safe105_POWER_ALL/safe105.c new file mode 100644 index 00000000000..b6a69d5cbe5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_POWER_ALL/safe105.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe105_POWER_ALL/test.desc new file mode 100644 index 00000000000..2ac38149396 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe105.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_POWER_OPC/safe105.c b/regression/goto-instrument-wmm-core/ppc_safe105_POWER_OPC/safe105.c new file mode 100644 index 00000000000..b6a69d5cbe5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_POWER_OPC/safe105.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe105_POWER_OPC/test.desc new file mode 100644 index 00000000000..c86eab1a8de --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe105.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe105_POWER_OPT/test.desc index 38c88eaa5c5..243c55d2116 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe105_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe105_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe105.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_PSO_ALL/safe105.c b/regression/goto-instrument-wmm-core/ppc_safe105_PSO_ALL/safe105.c new file mode 100644 index 00000000000..b6a69d5cbe5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_PSO_ALL/safe105.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe105_PSO_ALL/test.desc new file mode 100644 index 00000000000..a4ff6a2e2ca --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe105.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_PSO_OPC/safe105.c b/regression/goto-instrument-wmm-core/ppc_safe105_PSO_OPC/safe105.c new file mode 100644 index 00000000000..b6a69d5cbe5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_PSO_OPC/safe105.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe105_PSO_OPC/test.desc new file mode 100644 index 00000000000..8e232480ed7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe105.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_PSO_OPT/safe105.c b/regression/goto-instrument-wmm-core/ppc_safe105_PSO_OPT/safe105.c new file mode 100644 index 00000000000..b6a69d5cbe5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_PSO_OPT/safe105.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe105_PSO_OPT/test.desc new file mode 100644 index 00000000000..5b93c71f5ad --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe105.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_RMO_ALL/safe105.c b/regression/goto-instrument-wmm-core/ppc_safe105_RMO_ALL/safe105.c new file mode 100644 index 00000000000..b6a69d5cbe5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_RMO_ALL/safe105.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe105_RMO_ALL/test.desc new file mode 100644 index 00000000000..bdc7363c052 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe105.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_RMO_OPC/safe105.c b/regression/goto-instrument-wmm-core/ppc_safe105_RMO_OPC/safe105.c new file mode 100644 index 00000000000..b6a69d5cbe5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_RMO_OPC/safe105.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe105_RMO_OPC/test.desc new file mode 100644 index 00000000000..ba5d2fa12e6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe105.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_RMO_OPT/safe105.c b/regression/goto-instrument-wmm-core/ppc_safe105_RMO_OPT/safe105.c new file mode 100644 index 00000000000..b6a69d5cbe5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_RMO_OPT/safe105.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe105_RMO_OPT/test.desc new file mode 100644 index 00000000000..ea805dbaa34 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe105.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_SC_SAFE/safe105.c b/regression/goto-instrument-wmm-core/ppc_safe105_SC_SAFE/safe105.c new file mode 100644 index 00000000000..b6a69d5cbe5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_SC_SAFE/safe105.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe105_SC_SAFE/test.desc new file mode 100644 index 00000000000..36ffd0b72af --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe105.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_TSO_ALL/safe105.c b/regression/goto-instrument-wmm-core/ppc_safe105_TSO_ALL/safe105.c new file mode 100644 index 00000000000..b6a69d5cbe5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_TSO_ALL/safe105.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe105_TSO_ALL/test.desc new file mode 100644 index 00000000000..eb564c6d5b5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe105.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_TSO_OPC/safe105.c b/regression/goto-instrument-wmm-core/ppc_safe105_TSO_OPC/safe105.c new file mode 100644 index 00000000000..b6a69d5cbe5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_TSO_OPC/safe105.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe105_TSO_OPC/test.desc new file mode 100644 index 00000000000..92df2a1b451 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe105.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_TSO_OPT/safe105.c b/regression/goto-instrument-wmm-core/ppc_safe105_TSO_OPT/safe105.c new file mode 100644 index 00000000000..b6a69d5cbe5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_TSO_OPT/safe105.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe105_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe105_TSO_OPT/test.desc new file mode 100644 index 00000000000..e40a8a0b92b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe105_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe105.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_CAV11_SAFE/safe106.c b/regression/goto-instrument-wmm-core/ppc_safe106_CAV11_SAFE/safe106.c new file mode 100644 index 00000000000..e72fcf1626f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_CAV11_SAFE/safe106.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe106_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..b6b278b2201 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe106.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_POWER_ALL/safe106.c b/regression/goto-instrument-wmm-core/ppc_safe106_POWER_ALL/safe106.c new file mode 100644 index 00000000000..e72fcf1626f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_POWER_ALL/safe106.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe106_POWER_ALL/test.desc new file mode 100644 index 00000000000..3fc5d3786c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe106.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_POWER_OPC/safe106.c b/regression/goto-instrument-wmm-core/ppc_safe106_POWER_OPC/safe106.c new file mode 100644 index 00000000000..e72fcf1626f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_POWER_OPC/safe106.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe106_POWER_OPC/test.desc new file mode 100644 index 00000000000..09af15031b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe106.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_POWER_OPT/safe106.c b/regression/goto-instrument-wmm-core/ppc_safe106_POWER_OPT/safe106.c new file mode 100644 index 00000000000..e72fcf1626f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_POWER_OPT/safe106.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe106_POWER_OPT/test.desc new file mode 100644 index 00000000000..f074b0ab804 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe106.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_PSO_ALL/safe106.c b/regression/goto-instrument-wmm-core/ppc_safe106_PSO_ALL/safe106.c new file mode 100644 index 00000000000..e72fcf1626f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_PSO_ALL/safe106.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe106_PSO_ALL/test.desc new file mode 100644 index 00000000000..9389dc092ca --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe106.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_PSO_OPC/safe106.c b/regression/goto-instrument-wmm-core/ppc_safe106_PSO_OPC/safe106.c new file mode 100644 index 00000000000..e72fcf1626f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_PSO_OPC/safe106.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe106_PSO_OPC/test.desc new file mode 100644 index 00000000000..236b51b5ee2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe106.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_PSO_OPT/safe106.c b/regression/goto-instrument-wmm-core/ppc_safe106_PSO_OPT/safe106.c new file mode 100644 index 00000000000..e72fcf1626f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_PSO_OPT/safe106.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe106_PSO_OPT/test.desc new file mode 100644 index 00000000000..9ff7f73b503 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe106.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_RMO_ALL/safe106.c b/regression/goto-instrument-wmm-core/ppc_safe106_RMO_ALL/safe106.c new file mode 100644 index 00000000000..e72fcf1626f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_RMO_ALL/safe106.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe106_RMO_ALL/test.desc new file mode 100644 index 00000000000..747d51e1031 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe106.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_RMO_OPC/safe106.c b/regression/goto-instrument-wmm-core/ppc_safe106_RMO_OPC/safe106.c new file mode 100644 index 00000000000..e72fcf1626f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_RMO_OPC/safe106.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe106_RMO_OPC/test.desc new file mode 100644 index 00000000000..7a2fa406eea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe106.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_RMO_OPT/safe106.c b/regression/goto-instrument-wmm-core/ppc_safe106_RMO_OPT/safe106.c new file mode 100644 index 00000000000..e72fcf1626f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_RMO_OPT/safe106.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe106_RMO_OPT/test.desc new file mode 100644 index 00000000000..67751735b3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe106.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_SC_SAFE/safe106.c b/regression/goto-instrument-wmm-core/ppc_safe106_SC_SAFE/safe106.c new file mode 100644 index 00000000000..e72fcf1626f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_SC_SAFE/safe106.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe106_SC_SAFE/test.desc new file mode 100644 index 00000000000..f1eae982370 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe106.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_TSO_ALL/safe106.c b/regression/goto-instrument-wmm-core/ppc_safe106_TSO_ALL/safe106.c new file mode 100644 index 00000000000..e72fcf1626f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_TSO_ALL/safe106.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe106_TSO_ALL/test.desc new file mode 100644 index 00000000000..57ef2605a9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe106.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_TSO_OPC/safe106.c b/regression/goto-instrument-wmm-core/ppc_safe106_TSO_OPC/safe106.c new file mode 100644 index 00000000000..e72fcf1626f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_TSO_OPC/safe106.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe106_TSO_OPC/test.desc new file mode 100644 index 00000000000..0ecf2dbfbff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe106.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_TSO_OPT/safe106.c b/regression/goto-instrument-wmm-core/ppc_safe106_TSO_OPT/safe106.c new file mode 100644 index 00000000000..e72fcf1626f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_TSO_OPT/safe106.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe106_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe106_TSO_OPT/test.desc new file mode 100644 index 00000000000..4ced27ecebf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe106_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe106.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_CAV11_ERROR/safe107.c b/regression/goto-instrument-wmm-core/ppc_safe107_CAV11_ERROR/safe107.c new file mode 100644 index 00000000000..fd502d2933b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_CAV11_ERROR/safe107.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe107_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..d75a36a73b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe107.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_POWER_ALL/safe107.c b/regression/goto-instrument-wmm-core/ppc_safe107_POWER_ALL/safe107.c new file mode 100644 index 00000000000..fd502d2933b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_POWER_ALL/safe107.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe107_POWER_ALL/test.desc new file mode 100644 index 00000000000..282f6f01f3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe107.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_POWER_OPC/safe107.c b/regression/goto-instrument-wmm-core/ppc_safe107_POWER_OPC/safe107.c new file mode 100644 index 00000000000..fd502d2933b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_POWER_OPC/safe107.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe107_POWER_OPC/test.desc new file mode 100644 index 00000000000..e2feb5cbd7e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe107.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe107_POWER_OPT/test.desc index e8dc99d3759..2f366cde8cf 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe107_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe107_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe107.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_PSO_ALL/safe107.c b/regression/goto-instrument-wmm-core/ppc_safe107_PSO_ALL/safe107.c new file mode 100644 index 00000000000..fd502d2933b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_PSO_ALL/safe107.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe107_PSO_ALL/test.desc new file mode 100644 index 00000000000..f58bc6dc6bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe107.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_PSO_OPC/safe107.c b/regression/goto-instrument-wmm-core/ppc_safe107_PSO_OPC/safe107.c new file mode 100644 index 00000000000..fd502d2933b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_PSO_OPC/safe107.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe107_PSO_OPC/test.desc new file mode 100644 index 00000000000..d5b38325abe --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe107.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_PSO_OPT/safe107.c b/regression/goto-instrument-wmm-core/ppc_safe107_PSO_OPT/safe107.c new file mode 100644 index 00000000000..fd502d2933b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_PSO_OPT/safe107.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe107_PSO_OPT/test.desc new file mode 100644 index 00000000000..ee27ebb3dff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe107.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_RMO_ALL/safe107.c b/regression/goto-instrument-wmm-core/ppc_safe107_RMO_ALL/safe107.c new file mode 100644 index 00000000000..fd502d2933b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_RMO_ALL/safe107.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe107_RMO_ALL/test.desc new file mode 100644 index 00000000000..7fd7f1e9de1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe107.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_RMO_OPC/safe107.c b/regression/goto-instrument-wmm-core/ppc_safe107_RMO_OPC/safe107.c new file mode 100644 index 00000000000..fd502d2933b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_RMO_OPC/safe107.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe107_RMO_OPC/test.desc new file mode 100644 index 00000000000..d2b58e5c6ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe107.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_RMO_OPT/safe107.c b/regression/goto-instrument-wmm-core/ppc_safe107_RMO_OPT/safe107.c new file mode 100644 index 00000000000..fd502d2933b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_RMO_OPT/safe107.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe107_RMO_OPT/test.desc new file mode 100644 index 00000000000..f049ba5b5ce --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe107.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_SC_SAFE/safe107.c b/regression/goto-instrument-wmm-core/ppc_safe107_SC_SAFE/safe107.c new file mode 100644 index 00000000000..fd502d2933b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_SC_SAFE/safe107.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe107_SC_SAFE/test.desc new file mode 100644 index 00000000000..d0f42e6589f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe107.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_TSO_ALL/safe107.c b/regression/goto-instrument-wmm-core/ppc_safe107_TSO_ALL/safe107.c new file mode 100644 index 00000000000..fd502d2933b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_TSO_ALL/safe107.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe107_TSO_ALL/test.desc new file mode 100644 index 00000000000..e8b317d3f37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe107.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_TSO_OPC/safe107.c b/regression/goto-instrument-wmm-core/ppc_safe107_TSO_OPC/safe107.c new file mode 100644 index 00000000000..fd502d2933b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_TSO_OPC/safe107.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe107_TSO_OPC/test.desc new file mode 100644 index 00000000000..02482bf67c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe107.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_TSO_OPT/safe107.c b/regression/goto-instrument-wmm-core/ppc_safe107_TSO_OPT/safe107.c new file mode 100644 index 00000000000..fd502d2933b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_TSO_OPT/safe107.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + lwfence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe107_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe107_TSO_OPT/test.desc new file mode 100644 index 00000000000..1c7c8e447a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe107_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe107.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_CAV11_ERROR/safe108.c b/regression/goto-instrument-wmm-core/ppc_safe108_CAV11_ERROR/safe108.c new file mode 100644 index 00000000000..f7245072972 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_CAV11_ERROR/safe108.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe108_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..930c633aeb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe108.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_POWER_ALL/safe108.c b/regression/goto-instrument-wmm-core/ppc_safe108_POWER_ALL/safe108.c new file mode 100644 index 00000000000..f7245072972 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_POWER_ALL/safe108.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe108_POWER_ALL/test.desc new file mode 100644 index 00000000000..d06f11086d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe108.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_POWER_OPC/safe108.c b/regression/goto-instrument-wmm-core/ppc_safe108_POWER_OPC/safe108.c new file mode 100644 index 00000000000..f7245072972 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_POWER_OPC/safe108.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe108_POWER_OPC/test.desc new file mode 100644 index 00000000000..585237f3c9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe108.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_POWER_OPT/safe108.c b/regression/goto-instrument-wmm-core/ppc_safe108_POWER_OPT/safe108.c new file mode 100644 index 00000000000..f7245072972 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_POWER_OPT/safe108.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe108_POWER_OPT/test.desc new file mode 100644 index 00000000000..75daea27290 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe108.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_PSO_ALL/safe108.c b/regression/goto-instrument-wmm-core/ppc_safe108_PSO_ALL/safe108.c new file mode 100644 index 00000000000..f7245072972 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_PSO_ALL/safe108.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe108_PSO_ALL/test.desc new file mode 100644 index 00000000000..a237fb136fb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe108.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_PSO_OPC/safe108.c b/regression/goto-instrument-wmm-core/ppc_safe108_PSO_OPC/safe108.c new file mode 100644 index 00000000000..f7245072972 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_PSO_OPC/safe108.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe108_PSO_OPC/test.desc new file mode 100644 index 00000000000..17c1554ce71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe108.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_PSO_OPT/safe108.c b/regression/goto-instrument-wmm-core/ppc_safe108_PSO_OPT/safe108.c new file mode 100644 index 00000000000..f7245072972 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_PSO_OPT/safe108.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe108_PSO_OPT/test.desc new file mode 100644 index 00000000000..f235b095251 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe108.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_RMO_ALL/safe108.c b/regression/goto-instrument-wmm-core/ppc_safe108_RMO_ALL/safe108.c new file mode 100644 index 00000000000..f7245072972 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_RMO_ALL/safe108.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe108_RMO_ALL/test.desc new file mode 100644 index 00000000000..ef5a8db6210 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe108.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_RMO_OPC/safe108.c b/regression/goto-instrument-wmm-core/ppc_safe108_RMO_OPC/safe108.c new file mode 100644 index 00000000000..f7245072972 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_RMO_OPC/safe108.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe108_RMO_OPC/test.desc new file mode 100644 index 00000000000..403fcc5abf7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe108.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_RMO_OPT/safe108.c b/regression/goto-instrument-wmm-core/ppc_safe108_RMO_OPT/safe108.c new file mode 100644 index 00000000000..f7245072972 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_RMO_OPT/safe108.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe108_RMO_OPT/test.desc new file mode 100644 index 00000000000..7e639a83393 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe108.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_SC_SAFE/safe108.c b/regression/goto-instrument-wmm-core/ppc_safe108_SC_SAFE/safe108.c new file mode 100644 index 00000000000..f7245072972 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_SC_SAFE/safe108.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe108_SC_SAFE/test.desc new file mode 100644 index 00000000000..556c3650f11 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe108.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_TSO_ALL/safe108.c b/regression/goto-instrument-wmm-core/ppc_safe108_TSO_ALL/safe108.c new file mode 100644 index 00000000000..f7245072972 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_TSO_ALL/safe108.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe108_TSO_ALL/test.desc new file mode 100644 index 00000000000..19f647b4097 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe108.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_TSO_OPC/safe108.c b/regression/goto-instrument-wmm-core/ppc_safe108_TSO_OPC/safe108.c new file mode 100644 index 00000000000..f7245072972 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_TSO_OPC/safe108.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe108_TSO_OPC/test.desc new file mode 100644 index 00000000000..aad6d964f51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe108.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_TSO_OPT/safe108.c b/regression/goto-instrument-wmm-core/ppc_safe108_TSO_OPT/safe108.c new file mode 100644 index 00000000000..f7245072972 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_TSO_OPT/safe108.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe108_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe108_TSO_OPT/test.desc new file mode 100644 index 00000000000..d95dbb15e3b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe108_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe108.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_CAV11_ERROR/safe109.c b/regression/goto-instrument-wmm-core/ppc_safe109_CAV11_ERROR/safe109.c new file mode 100644 index 00000000000..41710aa54f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_CAV11_ERROR/safe109.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe109_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..dc22f96cf85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe109.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_POWER_ALL/safe109.c b/regression/goto-instrument-wmm-core/ppc_safe109_POWER_ALL/safe109.c new file mode 100644 index 00000000000..41710aa54f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_POWER_ALL/safe109.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe109_POWER_ALL/test.desc new file mode 100644 index 00000000000..30b2eeda43b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe109.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_POWER_OPC/safe109.c b/regression/goto-instrument-wmm-core/ppc_safe109_POWER_OPC/safe109.c new file mode 100644 index 00000000000..41710aa54f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_POWER_OPC/safe109.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe109_POWER_OPC/test.desc new file mode 100644 index 00000000000..d05b16b92db --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe109.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_POWER_OPT/safe109.c b/regression/goto-instrument-wmm-core/ppc_safe109_POWER_OPT/safe109.c new file mode 100644 index 00000000000..41710aa54f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_POWER_OPT/safe109.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe109_POWER_OPT/test.desc new file mode 100644 index 00000000000..fba453b8d3b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe109.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_PSO_ALL/safe109.c b/regression/goto-instrument-wmm-core/ppc_safe109_PSO_ALL/safe109.c new file mode 100644 index 00000000000..41710aa54f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_PSO_ALL/safe109.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe109_PSO_ALL/test.desc new file mode 100644 index 00000000000..d9d8e01dee3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe109.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_PSO_OPC/safe109.c b/regression/goto-instrument-wmm-core/ppc_safe109_PSO_OPC/safe109.c new file mode 100644 index 00000000000..41710aa54f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_PSO_OPC/safe109.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe109_PSO_OPC/test.desc new file mode 100644 index 00000000000..ce452c13fb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe109.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_PSO_OPT/safe109.c b/regression/goto-instrument-wmm-core/ppc_safe109_PSO_OPT/safe109.c new file mode 100644 index 00000000000..41710aa54f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_PSO_OPT/safe109.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe109_PSO_OPT/test.desc new file mode 100644 index 00000000000..c6e244965fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe109.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_RMO_ALL/safe109.c b/regression/goto-instrument-wmm-core/ppc_safe109_RMO_ALL/safe109.c new file mode 100644 index 00000000000..41710aa54f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_RMO_ALL/safe109.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe109_RMO_ALL/test.desc new file mode 100644 index 00000000000..4a9edd7de80 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe109.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_RMO_OPC/safe109.c b/regression/goto-instrument-wmm-core/ppc_safe109_RMO_OPC/safe109.c new file mode 100644 index 00000000000..41710aa54f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_RMO_OPC/safe109.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe109_RMO_OPC/test.desc new file mode 100644 index 00000000000..56252c89b31 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe109.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_RMO_OPT/safe109.c b/regression/goto-instrument-wmm-core/ppc_safe109_RMO_OPT/safe109.c new file mode 100644 index 00000000000..41710aa54f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_RMO_OPT/safe109.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe109_RMO_OPT/test.desc new file mode 100644 index 00000000000..63e85a11ae7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe109.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_SC_SAFE/safe109.c b/regression/goto-instrument-wmm-core/ppc_safe109_SC_SAFE/safe109.c new file mode 100644 index 00000000000..41710aa54f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_SC_SAFE/safe109.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe109_SC_SAFE/test.desc new file mode 100644 index 00000000000..15f5203076b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe109.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_TSO_ALL/safe109.c b/regression/goto-instrument-wmm-core/ppc_safe109_TSO_ALL/safe109.c new file mode 100644 index 00000000000..41710aa54f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_TSO_ALL/safe109.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe109_TSO_ALL/test.desc new file mode 100644 index 00000000000..cd73cbb2af5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe109.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_TSO_OPC/safe109.c b/regression/goto-instrument-wmm-core/ppc_safe109_TSO_OPC/safe109.c new file mode 100644 index 00000000000..41710aa54f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_TSO_OPC/safe109.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe109_TSO_OPC/test.desc new file mode 100644 index 00000000000..55447d60eab --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe109.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_TSO_OPT/safe109.c b/regression/goto-instrument-wmm-core/ppc_safe109_TSO_OPT/safe109.c new file mode 100644 index 00000000000..41710aa54f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_TSO_OPT/safe109.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe109_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe109_TSO_OPT/test.desc new file mode 100644 index 00000000000..0bef1b0a0c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe109_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe109.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_CAV11_ERROR/safe110.c b/regression/goto-instrument-wmm-core/ppc_safe110_CAV11_ERROR/safe110.c new file mode 100644 index 00000000000..591a5189baf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_CAV11_ERROR/safe110.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe110_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..7056ece58c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe110.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_POWER_ALL/safe110.c b/regression/goto-instrument-wmm-core/ppc_safe110_POWER_ALL/safe110.c new file mode 100644 index 00000000000..591a5189baf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_POWER_ALL/safe110.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe110_POWER_ALL/test.desc new file mode 100644 index 00000000000..23278f0cde5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe110.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_POWER_OPC/safe110.c b/regression/goto-instrument-wmm-core/ppc_safe110_POWER_OPC/safe110.c new file mode 100644 index 00000000000..591a5189baf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_POWER_OPC/safe110.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe110_POWER_OPC/test.desc new file mode 100644 index 00000000000..0cc03187925 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe110.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe110_POWER_OPT/test.desc index cafeb9d2eac..34e7a4048e7 100644 --- a/regression/goto-instrument-wmm-core/ppc_safe110_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_safe110_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk safe110.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_PSO_ALL/safe110.c b/regression/goto-instrument-wmm-core/ppc_safe110_PSO_ALL/safe110.c new file mode 100644 index 00000000000..591a5189baf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_PSO_ALL/safe110.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe110_PSO_ALL/test.desc new file mode 100644 index 00000000000..cea16eb0d31 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe110.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_PSO_OPC/safe110.c b/regression/goto-instrument-wmm-core/ppc_safe110_PSO_OPC/safe110.c new file mode 100644 index 00000000000..591a5189baf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_PSO_OPC/safe110.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe110_PSO_OPC/test.desc new file mode 100644 index 00000000000..35f155d0b59 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe110.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_PSO_OPT/safe110.c b/regression/goto-instrument-wmm-core/ppc_safe110_PSO_OPT/safe110.c new file mode 100644 index 00000000000..591a5189baf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_PSO_OPT/safe110.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe110_PSO_OPT/test.desc new file mode 100644 index 00000000000..41071f1b18b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe110.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_RMO_ALL/safe110.c b/regression/goto-instrument-wmm-core/ppc_safe110_RMO_ALL/safe110.c new file mode 100644 index 00000000000..591a5189baf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_RMO_ALL/safe110.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe110_RMO_ALL/test.desc new file mode 100644 index 00000000000..f41d39c6980 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe110.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_RMO_OPC/safe110.c b/regression/goto-instrument-wmm-core/ppc_safe110_RMO_OPC/safe110.c new file mode 100644 index 00000000000..591a5189baf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_RMO_OPC/safe110.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe110_RMO_OPC/test.desc new file mode 100644 index 00000000000..c18af5915bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe110.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_RMO_OPT/safe110.c b/regression/goto-instrument-wmm-core/ppc_safe110_RMO_OPT/safe110.c new file mode 100644 index 00000000000..591a5189baf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_RMO_OPT/safe110.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe110_RMO_OPT/test.desc new file mode 100644 index 00000000000..640861c577d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe110.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_SC_SAFE/safe110.c b/regression/goto-instrument-wmm-core/ppc_safe110_SC_SAFE/safe110.c new file mode 100644 index 00000000000..591a5189baf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_SC_SAFE/safe110.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe110_SC_SAFE/test.desc new file mode 100644 index 00000000000..a8b8c8a9542 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe110.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_TSO_ALL/safe110.c b/regression/goto-instrument-wmm-core/ppc_safe110_TSO_ALL/safe110.c new file mode 100644 index 00000000000..591a5189baf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_TSO_ALL/safe110.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe110_TSO_ALL/test.desc new file mode 100644 index 00000000000..15f970110e6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe110.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_TSO_OPC/safe110.c b/regression/goto-instrument-wmm-core/ppc_safe110_TSO_OPC/safe110.c new file mode 100644 index 00000000000..591a5189baf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_TSO_OPC/safe110.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe110_TSO_OPC/test.desc new file mode 100644 index 00000000000..464b11c392b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe110.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_TSO_OPT/safe110.c b/regression/goto-instrument-wmm-core/ppc_safe110_TSO_OPT/safe110.c new file mode 100644 index 00000000000..591a5189baf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_TSO_OPT/safe110.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 2; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe110_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe110_TSO_OPT/test.desc new file mode 100644 index 00000000000..f4c6b064bf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe110_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe110.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_CAV11_SAFE/safe111.c b/regression/goto-instrument-wmm-core/ppc_safe111_CAV11_SAFE/safe111.c new file mode 100644 index 00000000000..3caa44f68a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_CAV11_SAFE/safe111.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe111_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..1a0738ae822 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe111.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_POWER_ALL/safe111.c b/regression/goto-instrument-wmm-core/ppc_safe111_POWER_ALL/safe111.c new file mode 100644 index 00000000000..3caa44f68a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_POWER_ALL/safe111.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe111_POWER_ALL/test.desc new file mode 100644 index 00000000000..2300318e29f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe111.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_POWER_OPC/safe111.c b/regression/goto-instrument-wmm-core/ppc_safe111_POWER_OPC/safe111.c new file mode 100644 index 00000000000..3caa44f68a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_POWER_OPC/safe111.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe111_POWER_OPC/test.desc new file mode 100644 index 00000000000..0ed172fdbfb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe111.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_POWER_OPT/safe111.c b/regression/goto-instrument-wmm-core/ppc_safe111_POWER_OPT/safe111.c new file mode 100644 index 00000000000..3caa44f68a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_POWER_OPT/safe111.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe111_POWER_OPT/test.desc new file mode 100644 index 00000000000..8fa80052686 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe111.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_PSO_ALL/safe111.c b/regression/goto-instrument-wmm-core/ppc_safe111_PSO_ALL/safe111.c new file mode 100644 index 00000000000..3caa44f68a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_PSO_ALL/safe111.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe111_PSO_ALL/test.desc new file mode 100644 index 00000000000..f1847985fe7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe111.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_PSO_OPC/safe111.c b/regression/goto-instrument-wmm-core/ppc_safe111_PSO_OPC/safe111.c new file mode 100644 index 00000000000..3caa44f68a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_PSO_OPC/safe111.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe111_PSO_OPC/test.desc new file mode 100644 index 00000000000..eb4610154bf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe111.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_PSO_OPT/safe111.c b/regression/goto-instrument-wmm-core/ppc_safe111_PSO_OPT/safe111.c new file mode 100644 index 00000000000..3caa44f68a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_PSO_OPT/safe111.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe111_PSO_OPT/test.desc new file mode 100644 index 00000000000..c9a55a70adf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe111.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_RMO_ALL/safe111.c b/regression/goto-instrument-wmm-core/ppc_safe111_RMO_ALL/safe111.c new file mode 100644 index 00000000000..3caa44f68a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_RMO_ALL/safe111.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe111_RMO_ALL/test.desc new file mode 100644 index 00000000000..ffa16e2529f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe111.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_RMO_OPC/safe111.c b/regression/goto-instrument-wmm-core/ppc_safe111_RMO_OPC/safe111.c new file mode 100644 index 00000000000..3caa44f68a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_RMO_OPC/safe111.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe111_RMO_OPC/test.desc new file mode 100644 index 00000000000..a7902959b8c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe111.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_RMO_OPT/safe111.c b/regression/goto-instrument-wmm-core/ppc_safe111_RMO_OPT/safe111.c new file mode 100644 index 00000000000..3caa44f68a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_RMO_OPT/safe111.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe111_RMO_OPT/test.desc new file mode 100644 index 00000000000..5ec712b7c92 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe111.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_SC_SAFE/safe111.c b/regression/goto-instrument-wmm-core/ppc_safe111_SC_SAFE/safe111.c new file mode 100644 index 00000000000..3caa44f68a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_SC_SAFE/safe111.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe111_SC_SAFE/test.desc new file mode 100644 index 00000000000..145bab1bfea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe111.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_TSO_ALL/safe111.c b/regression/goto-instrument-wmm-core/ppc_safe111_TSO_ALL/safe111.c new file mode 100644 index 00000000000..3caa44f68a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_TSO_ALL/safe111.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe111_TSO_ALL/test.desc new file mode 100644 index 00000000000..c61a4b078f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe111.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_TSO_OPC/safe111.c b/regression/goto-instrument-wmm-core/ppc_safe111_TSO_OPC/safe111.c new file mode 100644 index 00000000000..3caa44f68a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_TSO_OPC/safe111.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe111_TSO_OPC/test.desc new file mode 100644 index 00000000000..1db9edb1159 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe111.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_TSO_OPT/safe111.c b/regression/goto-instrument-wmm-core/ppc_safe111_TSO_OPT/safe111.c new file mode 100644 index 00000000000..3caa44f68a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_TSO_OPT/safe111.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = 1; + x = __unbuffered_p2_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = x; + fence(); + __unbuffered_p3_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0 && + __unbuffered_p3_r1 == 1 && __unbuffered_p3_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe111_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe111_TSO_OPT/test.desc new file mode 100644 index 00000000000..ee5099eecea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe111_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe111.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_CAV11_SAFE/safe112.c b/regression/goto-instrument-wmm-core/ppc_safe112_CAV11_SAFE/safe112.c new file mode 100644 index 00000000000..4da53a66a37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_CAV11_SAFE/safe112.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe112_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..f3bb40c5422 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe112.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_POWER_ALL/safe112.c b/regression/goto-instrument-wmm-core/ppc_safe112_POWER_ALL/safe112.c new file mode 100644 index 00000000000..4da53a66a37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_POWER_ALL/safe112.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe112_POWER_ALL/test.desc new file mode 100644 index 00000000000..2c4c083d9be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe112.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_POWER_OPC/safe112.c b/regression/goto-instrument-wmm-core/ppc_safe112_POWER_OPC/safe112.c new file mode 100644 index 00000000000..4da53a66a37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_POWER_OPC/safe112.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe112_POWER_OPC/test.desc new file mode 100644 index 00000000000..cfc8fc75417 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe112.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_POWER_OPT/safe112.c b/regression/goto-instrument-wmm-core/ppc_safe112_POWER_OPT/safe112.c new file mode 100644 index 00000000000..4da53a66a37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_POWER_OPT/safe112.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe112_POWER_OPT/test.desc new file mode 100644 index 00000000000..f242b5aa9f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe112.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_PSO_ALL/safe112.c b/regression/goto-instrument-wmm-core/ppc_safe112_PSO_ALL/safe112.c new file mode 100644 index 00000000000..4da53a66a37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_PSO_ALL/safe112.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe112_PSO_ALL/test.desc new file mode 100644 index 00000000000..ff426c9c86c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe112.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_PSO_OPC/safe112.c b/regression/goto-instrument-wmm-core/ppc_safe112_PSO_OPC/safe112.c new file mode 100644 index 00000000000..4da53a66a37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_PSO_OPC/safe112.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe112_PSO_OPC/test.desc new file mode 100644 index 00000000000..35a4943a9d5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe112.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_PSO_OPT/safe112.c b/regression/goto-instrument-wmm-core/ppc_safe112_PSO_OPT/safe112.c new file mode 100644 index 00000000000..4da53a66a37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_PSO_OPT/safe112.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe112_PSO_OPT/test.desc new file mode 100644 index 00000000000..ca8aee64a02 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe112.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_RMO_ALL/safe112.c b/regression/goto-instrument-wmm-core/ppc_safe112_RMO_ALL/safe112.c new file mode 100644 index 00000000000..4da53a66a37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_RMO_ALL/safe112.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe112_RMO_ALL/test.desc new file mode 100644 index 00000000000..6d72d4d581b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe112.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_RMO_OPC/safe112.c b/regression/goto-instrument-wmm-core/ppc_safe112_RMO_OPC/safe112.c new file mode 100644 index 00000000000..4da53a66a37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_RMO_OPC/safe112.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe112_RMO_OPC/test.desc new file mode 100644 index 00000000000..07a5c6bfa27 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe112.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_RMO_OPT/safe112.c b/regression/goto-instrument-wmm-core/ppc_safe112_RMO_OPT/safe112.c new file mode 100644 index 00000000000..4da53a66a37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_RMO_OPT/safe112.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe112_RMO_OPT/test.desc new file mode 100644 index 00000000000..e69f1153f39 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe112.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_SC_SAFE/safe112.c b/regression/goto-instrument-wmm-core/ppc_safe112_SC_SAFE/safe112.c new file mode 100644 index 00000000000..4da53a66a37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_SC_SAFE/safe112.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe112_SC_SAFE/test.desc new file mode 100644 index 00000000000..23ec1fafe55 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe112.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_TSO_ALL/safe112.c b/regression/goto-instrument-wmm-core/ppc_safe112_TSO_ALL/safe112.c new file mode 100644 index 00000000000..4da53a66a37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_TSO_ALL/safe112.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe112_TSO_ALL/test.desc new file mode 100644 index 00000000000..c1c3e4efde0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe112.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_TSO_OPC/safe112.c b/regression/goto-instrument-wmm-core/ppc_safe112_TSO_OPC/safe112.c new file mode 100644 index 00000000000..4da53a66a37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_TSO_OPC/safe112.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe112_TSO_OPC/test.desc new file mode 100644 index 00000000000..23d56339789 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe112.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_TSO_OPT/safe112.c b/regression/goto-instrument-wmm-core/ppc_safe112_TSO_OPT/safe112.c new file mode 100644 index 00000000000..4da53a66a37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_TSO_OPT/safe112.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe112_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe112_TSO_OPT/test.desc new file mode 100644 index 00000000000..9dd33fd224c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe112_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe112.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_CAV11_SAFE/safe113.c b/regression/goto-instrument-wmm-core/ppc_safe113_CAV11_SAFE/safe113.c new file mode 100644 index 00000000000..93704cc107e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_CAV11_SAFE/safe113.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe113_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..7d91036c3d6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe113.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_POWER_ALL/safe113.c b/regression/goto-instrument-wmm-core/ppc_safe113_POWER_ALL/safe113.c new file mode 100644 index 00000000000..93704cc107e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_POWER_ALL/safe113.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe113_POWER_ALL/test.desc new file mode 100644 index 00000000000..bee1fcc297b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe113.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_POWER_OPC/safe113.c b/regression/goto-instrument-wmm-core/ppc_safe113_POWER_OPC/safe113.c new file mode 100644 index 00000000000..93704cc107e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_POWER_OPC/safe113.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe113_POWER_OPC/test.desc new file mode 100644 index 00000000000..8026545e276 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe113.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_POWER_OPT/safe113.c b/regression/goto-instrument-wmm-core/ppc_safe113_POWER_OPT/safe113.c new file mode 100644 index 00000000000..93704cc107e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_POWER_OPT/safe113.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe113_POWER_OPT/test.desc new file mode 100644 index 00000000000..1774ea43d10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe113.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_PSO_ALL/safe113.c b/regression/goto-instrument-wmm-core/ppc_safe113_PSO_ALL/safe113.c new file mode 100644 index 00000000000..93704cc107e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_PSO_ALL/safe113.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe113_PSO_ALL/test.desc new file mode 100644 index 00000000000..329d41d0b30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe113.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_PSO_OPC/safe113.c b/regression/goto-instrument-wmm-core/ppc_safe113_PSO_OPC/safe113.c new file mode 100644 index 00000000000..93704cc107e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_PSO_OPC/safe113.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe113_PSO_OPC/test.desc new file mode 100644 index 00000000000..39299e4d71b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe113.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_PSO_OPT/safe113.c b/regression/goto-instrument-wmm-core/ppc_safe113_PSO_OPT/safe113.c new file mode 100644 index 00000000000..93704cc107e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_PSO_OPT/safe113.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe113_PSO_OPT/test.desc new file mode 100644 index 00000000000..45794a19f0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe113.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_RMO_ALL/safe113.c b/regression/goto-instrument-wmm-core/ppc_safe113_RMO_ALL/safe113.c new file mode 100644 index 00000000000..93704cc107e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_RMO_ALL/safe113.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe113_RMO_ALL/test.desc new file mode 100644 index 00000000000..c434afd4716 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe113.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_RMO_OPC/safe113.c b/regression/goto-instrument-wmm-core/ppc_safe113_RMO_OPC/safe113.c new file mode 100644 index 00000000000..93704cc107e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_RMO_OPC/safe113.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe113_RMO_OPC/test.desc new file mode 100644 index 00000000000..e6f53cfcddb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe113.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_RMO_OPT/safe113.c b/regression/goto-instrument-wmm-core/ppc_safe113_RMO_OPT/safe113.c new file mode 100644 index 00000000000..93704cc107e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_RMO_OPT/safe113.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe113_RMO_OPT/test.desc new file mode 100644 index 00000000000..cecb2ec4aaf --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe113.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_SC_SAFE/safe113.c b/regression/goto-instrument-wmm-core/ppc_safe113_SC_SAFE/safe113.c new file mode 100644 index 00000000000..93704cc107e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_SC_SAFE/safe113.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe113_SC_SAFE/test.desc new file mode 100644 index 00000000000..e4defd730f2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe113.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_TSO_ALL/safe113.c b/regression/goto-instrument-wmm-core/ppc_safe113_TSO_ALL/safe113.c new file mode 100644 index 00000000000..93704cc107e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_TSO_ALL/safe113.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe113_TSO_ALL/test.desc new file mode 100644 index 00000000000..021bd2f43bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe113.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_TSO_OPC/safe113.c b/regression/goto-instrument-wmm-core/ppc_safe113_TSO_OPC/safe113.c new file mode 100644 index 00000000000..93704cc107e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_TSO_OPC/safe113.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe113_TSO_OPC/test.desc new file mode 100644 index 00000000000..8c150d6ca5c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe113.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_TSO_OPT/safe113.c b/regression/goto-instrument-wmm-core/ppc_safe113_TSO_OPT/safe113.c new file mode 100644 index 00000000000..93704cc107e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_TSO_OPT/safe113.c @@ -0,0 +1,76 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe113_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe113_TSO_OPT/test.desc new file mode 100644 index 00000000000..4aa76a1078a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe113_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe113.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_CAV11_ERROR/safe114.c b/regression/goto-instrument-wmm-core/ppc_safe114_CAV11_ERROR/safe114.c new file mode 100644 index 00000000000..c7c116acd75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_CAV11_ERROR/safe114.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe114_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..967b0da2c7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe114.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_POWER_ALL/safe114.c b/regression/goto-instrument-wmm-core/ppc_safe114_POWER_ALL/safe114.c new file mode 100644 index 00000000000..c7c116acd75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_POWER_ALL/safe114.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe114_POWER_ALL/test.desc new file mode 100644 index 00000000000..c6310436364 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe114.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_POWER_OPC/safe114.c b/regression/goto-instrument-wmm-core/ppc_safe114_POWER_OPC/safe114.c new file mode 100644 index 00000000000..c7c116acd75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_POWER_OPC/safe114.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe114_POWER_OPC/test.desc new file mode 100644 index 00000000000..c5bf8bb6896 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe114.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_POWER_OPT/safe114.c b/regression/goto-instrument-wmm-core/ppc_safe114_POWER_OPT/safe114.c new file mode 100644 index 00000000000..c7c116acd75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_POWER_OPT/safe114.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe114_POWER_OPT/test.desc new file mode 100644 index 00000000000..5b1c5ba4ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe114.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_PSO_ALL/safe114.c b/regression/goto-instrument-wmm-core/ppc_safe114_PSO_ALL/safe114.c new file mode 100644 index 00000000000..c7c116acd75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_PSO_ALL/safe114.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe114_PSO_ALL/test.desc new file mode 100644 index 00000000000..4f1af4a5a36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe114.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_PSO_OPC/safe114.c b/regression/goto-instrument-wmm-core/ppc_safe114_PSO_OPC/safe114.c new file mode 100644 index 00000000000..c7c116acd75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_PSO_OPC/safe114.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe114_PSO_OPC/test.desc new file mode 100644 index 00000000000..2abadef880b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe114.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_PSO_OPT/safe114.c b/regression/goto-instrument-wmm-core/ppc_safe114_PSO_OPT/safe114.c new file mode 100644 index 00000000000..c7c116acd75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_PSO_OPT/safe114.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe114_PSO_OPT/test.desc new file mode 100644 index 00000000000..e3db1a20b80 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe114.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_RMO_ALL/safe114.c b/regression/goto-instrument-wmm-core/ppc_safe114_RMO_ALL/safe114.c new file mode 100644 index 00000000000..c7c116acd75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_RMO_ALL/safe114.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe114_RMO_ALL/test.desc new file mode 100644 index 00000000000..0b16bdbd8d5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe114.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_RMO_OPC/safe114.c b/regression/goto-instrument-wmm-core/ppc_safe114_RMO_OPC/safe114.c new file mode 100644 index 00000000000..c7c116acd75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_RMO_OPC/safe114.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe114_RMO_OPC/test.desc new file mode 100644 index 00000000000..2904acae24d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe114.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_RMO_OPT/safe114.c b/regression/goto-instrument-wmm-core/ppc_safe114_RMO_OPT/safe114.c new file mode 100644 index 00000000000..c7c116acd75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_RMO_OPT/safe114.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe114_RMO_OPT/test.desc new file mode 100644 index 00000000000..15a3f261a77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe114.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_SC_SAFE/safe114.c b/regression/goto-instrument-wmm-core/ppc_safe114_SC_SAFE/safe114.c new file mode 100644 index 00000000000..c7c116acd75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_SC_SAFE/safe114.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe114_SC_SAFE/test.desc new file mode 100644 index 00000000000..b192f1ea81e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe114.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_TSO_ALL/safe114.c b/regression/goto-instrument-wmm-core/ppc_safe114_TSO_ALL/safe114.c new file mode 100644 index 00000000000..c7c116acd75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_TSO_ALL/safe114.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe114_TSO_ALL/test.desc new file mode 100644 index 00000000000..5f90f5e0cee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe114.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_TSO_OPC/safe114.c b/regression/goto-instrument-wmm-core/ppc_safe114_TSO_OPC/safe114.c new file mode 100644 index 00000000000..c7c116acd75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_TSO_OPC/safe114.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe114_TSO_OPC/test.desc new file mode 100644 index 00000000000..2ac04712259 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe114.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_TSO_OPT/safe114.c b/regression/goto-instrument-wmm-core/ppc_safe114_TSO_OPT/safe114.c new file mode 100644 index 00000000000..c7c116acd75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_TSO_OPT/safe114.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 2; + *(&x + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe114_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe114_TSO_OPT/test.desc new file mode 100644 index 00000000000..d100dc81d00 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe114_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe114.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_CAV11_SAFE/safe115.c b/regression/goto-instrument-wmm-core/ppc_safe115_CAV11_SAFE/safe115.c new file mode 100644 index 00000000000..ce349d42460 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_CAV11_SAFE/safe115.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe115_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..63162275bc5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe115.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_POWER_ALL/safe115.c b/regression/goto-instrument-wmm-core/ppc_safe115_POWER_ALL/safe115.c new file mode 100644 index 00000000000..ce349d42460 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_POWER_ALL/safe115.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe115_POWER_ALL/test.desc new file mode 100644 index 00000000000..1a286038616 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe115.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_POWER_OPC/safe115.c b/regression/goto-instrument-wmm-core/ppc_safe115_POWER_OPC/safe115.c new file mode 100644 index 00000000000..ce349d42460 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_POWER_OPC/safe115.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe115_POWER_OPC/test.desc new file mode 100644 index 00000000000..5d4da1204d7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe115.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_POWER_OPT/safe115.c b/regression/goto-instrument-wmm-core/ppc_safe115_POWER_OPT/safe115.c new file mode 100644 index 00000000000..ce349d42460 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_POWER_OPT/safe115.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe115_POWER_OPT/test.desc new file mode 100644 index 00000000000..6c2992f8e8c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe115.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_PSO_ALL/safe115.c b/regression/goto-instrument-wmm-core/ppc_safe115_PSO_ALL/safe115.c new file mode 100644 index 00000000000..ce349d42460 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_PSO_ALL/safe115.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe115_PSO_ALL/test.desc new file mode 100644 index 00000000000..373a27d90a0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe115.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_PSO_OPC/safe115.c b/regression/goto-instrument-wmm-core/ppc_safe115_PSO_OPC/safe115.c new file mode 100644 index 00000000000..ce349d42460 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_PSO_OPC/safe115.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe115_PSO_OPC/test.desc new file mode 100644 index 00000000000..a9edd5cdbfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe115.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_PSO_OPT/safe115.c b/regression/goto-instrument-wmm-core/ppc_safe115_PSO_OPT/safe115.c new file mode 100644 index 00000000000..ce349d42460 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_PSO_OPT/safe115.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe115_PSO_OPT/test.desc new file mode 100644 index 00000000000..85688e1a23d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe115.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_RMO_ALL/safe115.c b/regression/goto-instrument-wmm-core/ppc_safe115_RMO_ALL/safe115.c new file mode 100644 index 00000000000..ce349d42460 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_RMO_ALL/safe115.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe115_RMO_ALL/test.desc new file mode 100644 index 00000000000..0f3a5f5e249 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe115.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_RMO_OPC/safe115.c b/regression/goto-instrument-wmm-core/ppc_safe115_RMO_OPC/safe115.c new file mode 100644 index 00000000000..ce349d42460 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_RMO_OPC/safe115.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe115_RMO_OPC/test.desc new file mode 100644 index 00000000000..da9a47ad690 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe115.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_RMO_OPT/safe115.c b/regression/goto-instrument-wmm-core/ppc_safe115_RMO_OPT/safe115.c new file mode 100644 index 00000000000..ce349d42460 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_RMO_OPT/safe115.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe115_RMO_OPT/test.desc new file mode 100644 index 00000000000..100f3437982 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe115.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_SC_SAFE/safe115.c b/regression/goto-instrument-wmm-core/ppc_safe115_SC_SAFE/safe115.c new file mode 100644 index 00000000000..ce349d42460 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_SC_SAFE/safe115.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe115_SC_SAFE/test.desc new file mode 100644 index 00000000000..f2dc0f0198a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe115.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_TSO_ALL/safe115.c b/regression/goto-instrument-wmm-core/ppc_safe115_TSO_ALL/safe115.c new file mode 100644 index 00000000000..ce349d42460 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_TSO_ALL/safe115.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe115_TSO_ALL/test.desc new file mode 100644 index 00000000000..07cee4a4c66 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe115.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_TSO_OPC/safe115.c b/regression/goto-instrument-wmm-core/ppc_safe115_TSO_OPC/safe115.c new file mode 100644 index 00000000000..ce349d42460 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_TSO_OPC/safe115.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe115_TSO_OPC/test.desc new file mode 100644 index 00000000000..1157676c303 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe115.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_TSO_OPT/safe115.c b/regression/goto-instrument-wmm-core/ppc_safe115_TSO_OPT/safe115.c new file mode 100644 index 00000000000..ce349d42460 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_TSO_OPT/safe115.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p1_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe115_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe115_TSO_OPT/test.desc new file mode 100644 index 00000000000..3ce42268639 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe115_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe115.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_CAV11_SAFE/safe116.c b/regression/goto-instrument-wmm-core/ppc_safe116_CAV11_SAFE/safe116.c new file mode 100644 index 00000000000..2c98f76b899 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_CAV11_SAFE/safe116.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe116_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..457d4f4aba9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe116.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_POWER_ALL/safe116.c b/regression/goto-instrument-wmm-core/ppc_safe116_POWER_ALL/safe116.c new file mode 100644 index 00000000000..2c98f76b899 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_POWER_ALL/safe116.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe116_POWER_ALL/test.desc new file mode 100644 index 00000000000..1e154afd5a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe116.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_POWER_OPC/safe116.c b/regression/goto-instrument-wmm-core/ppc_safe116_POWER_OPC/safe116.c new file mode 100644 index 00000000000..2c98f76b899 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_POWER_OPC/safe116.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe116_POWER_OPC/test.desc new file mode 100644 index 00000000000..65bfa094296 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe116.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_POWER_OPT/safe116.c b/regression/goto-instrument-wmm-core/ppc_safe116_POWER_OPT/safe116.c new file mode 100644 index 00000000000..2c98f76b899 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_POWER_OPT/safe116.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe116_POWER_OPT/test.desc new file mode 100644 index 00000000000..2dc9e166b95 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe116.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_PSO_ALL/safe116.c b/regression/goto-instrument-wmm-core/ppc_safe116_PSO_ALL/safe116.c new file mode 100644 index 00000000000..2c98f76b899 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_PSO_ALL/safe116.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe116_PSO_ALL/test.desc new file mode 100644 index 00000000000..607f53765a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe116.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_PSO_OPC/safe116.c b/regression/goto-instrument-wmm-core/ppc_safe116_PSO_OPC/safe116.c new file mode 100644 index 00000000000..2c98f76b899 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_PSO_OPC/safe116.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe116_PSO_OPC/test.desc new file mode 100644 index 00000000000..e51664b644d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe116.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_PSO_OPT/safe116.c b/regression/goto-instrument-wmm-core/ppc_safe116_PSO_OPT/safe116.c new file mode 100644 index 00000000000..2c98f76b899 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_PSO_OPT/safe116.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe116_PSO_OPT/test.desc new file mode 100644 index 00000000000..eb86ba4be37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe116.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_RMO_ALL/safe116.c b/regression/goto-instrument-wmm-core/ppc_safe116_RMO_ALL/safe116.c new file mode 100644 index 00000000000..2c98f76b899 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_RMO_ALL/safe116.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe116_RMO_ALL/test.desc new file mode 100644 index 00000000000..0b07c6d870e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe116.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_RMO_OPC/safe116.c b/regression/goto-instrument-wmm-core/ppc_safe116_RMO_OPC/safe116.c new file mode 100644 index 00000000000..2c98f76b899 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_RMO_OPC/safe116.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe116_RMO_OPC/test.desc new file mode 100644 index 00000000000..f4910b19da4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe116.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_RMO_OPT/safe116.c b/regression/goto-instrument-wmm-core/ppc_safe116_RMO_OPT/safe116.c new file mode 100644 index 00000000000..2c98f76b899 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_RMO_OPT/safe116.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe116_RMO_OPT/test.desc new file mode 100644 index 00000000000..d444c97de7a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe116.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_SC_SAFE/safe116.c b/regression/goto-instrument-wmm-core/ppc_safe116_SC_SAFE/safe116.c new file mode 100644 index 00000000000..2c98f76b899 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_SC_SAFE/safe116.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe116_SC_SAFE/test.desc new file mode 100644 index 00000000000..0eaa4953611 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe116.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_TSO_ALL/safe116.c b/regression/goto-instrument-wmm-core/ppc_safe116_TSO_ALL/safe116.c new file mode 100644 index 00000000000..2c98f76b899 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_TSO_ALL/safe116.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe116_TSO_ALL/test.desc new file mode 100644 index 00000000000..592f3944d54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe116.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_TSO_OPC/safe116.c b/regression/goto-instrument-wmm-core/ppc_safe116_TSO_OPC/safe116.c new file mode 100644 index 00000000000..2c98f76b899 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_TSO_OPC/safe116.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe116_TSO_OPC/test.desc new file mode 100644 index 00000000000..08b278fadad --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe116.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_TSO_OPT/safe116.c b/regression/goto-instrument-wmm-core/ppc_safe116_TSO_OPT/safe116.c new file mode 100644 index 00000000000..2c98f76b899 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_TSO_OPT/safe116.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + lwfence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe116_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe116_TSO_OPT/test.desc new file mode 100644 index 00000000000..588fc555652 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe116_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe116.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_CAV11_SAFE/safe117.c b/regression/goto-instrument-wmm-core/ppc_safe117_CAV11_SAFE/safe117.c new file mode 100644 index 00000000000..4a52128ff3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_CAV11_SAFE/safe117.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe117_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..187042a53e1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe117.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_POWER_ALL/safe117.c b/regression/goto-instrument-wmm-core/ppc_safe117_POWER_ALL/safe117.c new file mode 100644 index 00000000000..4a52128ff3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_POWER_ALL/safe117.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe117_POWER_ALL/test.desc new file mode 100644 index 00000000000..c6f6c571147 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe117.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_POWER_OPC/safe117.c b/regression/goto-instrument-wmm-core/ppc_safe117_POWER_OPC/safe117.c new file mode 100644 index 00000000000..4a52128ff3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_POWER_OPC/safe117.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe117_POWER_OPC/test.desc new file mode 100644 index 00000000000..6fb1e60c60a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe117.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_POWER_OPT/safe117.c b/regression/goto-instrument-wmm-core/ppc_safe117_POWER_OPT/safe117.c new file mode 100644 index 00000000000..4a52128ff3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_POWER_OPT/safe117.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe117_POWER_OPT/test.desc new file mode 100644 index 00000000000..2b484912c5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe117.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_PSO_ALL/safe117.c b/regression/goto-instrument-wmm-core/ppc_safe117_PSO_ALL/safe117.c new file mode 100644 index 00000000000..4a52128ff3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_PSO_ALL/safe117.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe117_PSO_ALL/test.desc new file mode 100644 index 00000000000..2c538c9ead0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe117.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_PSO_OPC/safe117.c b/regression/goto-instrument-wmm-core/ppc_safe117_PSO_OPC/safe117.c new file mode 100644 index 00000000000..4a52128ff3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_PSO_OPC/safe117.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe117_PSO_OPC/test.desc new file mode 100644 index 00000000000..3428378b912 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe117.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_PSO_OPT/safe117.c b/regression/goto-instrument-wmm-core/ppc_safe117_PSO_OPT/safe117.c new file mode 100644 index 00000000000..4a52128ff3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_PSO_OPT/safe117.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe117_PSO_OPT/test.desc new file mode 100644 index 00000000000..bbeabe9bd35 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe117.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_RMO_ALL/safe117.c b/regression/goto-instrument-wmm-core/ppc_safe117_RMO_ALL/safe117.c new file mode 100644 index 00000000000..4a52128ff3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_RMO_ALL/safe117.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe117_RMO_ALL/test.desc new file mode 100644 index 00000000000..7cb51fa6be7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe117.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_RMO_OPC/safe117.c b/regression/goto-instrument-wmm-core/ppc_safe117_RMO_OPC/safe117.c new file mode 100644 index 00000000000..4a52128ff3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_RMO_OPC/safe117.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe117_RMO_OPC/test.desc new file mode 100644 index 00000000000..dffe4a53587 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe117.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_RMO_OPT/safe117.c b/regression/goto-instrument-wmm-core/ppc_safe117_RMO_OPT/safe117.c new file mode 100644 index 00000000000..4a52128ff3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_RMO_OPT/safe117.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe117_RMO_OPT/test.desc new file mode 100644 index 00000000000..9a136251be1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe117.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_SC_SAFE/safe117.c b/regression/goto-instrument-wmm-core/ppc_safe117_SC_SAFE/safe117.c new file mode 100644 index 00000000000..4a52128ff3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_SC_SAFE/safe117.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe117_SC_SAFE/test.desc new file mode 100644 index 00000000000..7659ad4a1f9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe117.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_TSO_ALL/safe117.c b/regression/goto-instrument-wmm-core/ppc_safe117_TSO_ALL/safe117.c new file mode 100644 index 00000000000..4a52128ff3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_TSO_ALL/safe117.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe117_TSO_ALL/test.desc new file mode 100644 index 00000000000..84c210e9cc2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe117.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_TSO_OPC/safe117.c b/regression/goto-instrument-wmm-core/ppc_safe117_TSO_OPC/safe117.c new file mode 100644 index 00000000000..4a52128ff3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_TSO_OPC/safe117.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe117_TSO_OPC/test.desc new file mode 100644 index 00000000000..32db18ceed5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe117.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_TSO_OPT/safe117.c b/regression/goto-instrument-wmm-core/ppc_safe117_TSO_OPT/safe117.c new file mode 100644 index 00000000000..4a52128ff3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_TSO_OPT/safe117.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe117_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe117_TSO_OPT/test.desc new file mode 100644 index 00000000000..1cdd5c28f67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe117_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe117.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_CAV11_ERROR/safe118.c b/regression/goto-instrument-wmm-core/ppc_safe118_CAV11_ERROR/safe118.c new file mode 100644 index 00000000000..9e642eed161 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_CAV11_ERROR/safe118.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe118_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..039de36aca6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe118.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_POWER_ALL/safe118.c b/regression/goto-instrument-wmm-core/ppc_safe118_POWER_ALL/safe118.c new file mode 100644 index 00000000000..9e642eed161 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_POWER_ALL/safe118.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe118_POWER_ALL/test.desc new file mode 100644 index 00000000000..40dfa25c1b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe118.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_POWER_OPC/safe118.c b/regression/goto-instrument-wmm-core/ppc_safe118_POWER_OPC/safe118.c new file mode 100644 index 00000000000..9e642eed161 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_POWER_OPC/safe118.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe118_POWER_OPC/test.desc new file mode 100644 index 00000000000..8d64356c748 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe118.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_POWER_OPT/safe118.c b/regression/goto-instrument-wmm-core/ppc_safe118_POWER_OPT/safe118.c new file mode 100644 index 00000000000..9e642eed161 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_POWER_OPT/safe118.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe118_POWER_OPT/test.desc new file mode 100644 index 00000000000..f9ae4859684 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe118.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_PSO_ALL/safe118.c b/regression/goto-instrument-wmm-core/ppc_safe118_PSO_ALL/safe118.c new file mode 100644 index 00000000000..9e642eed161 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_PSO_ALL/safe118.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe118_PSO_ALL/test.desc new file mode 100644 index 00000000000..928a1d80805 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe118.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_PSO_OPC/safe118.c b/regression/goto-instrument-wmm-core/ppc_safe118_PSO_OPC/safe118.c new file mode 100644 index 00000000000..9e642eed161 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_PSO_OPC/safe118.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe118_PSO_OPC/test.desc new file mode 100644 index 00000000000..b1a1389c6ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe118.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_PSO_OPT/safe118.c b/regression/goto-instrument-wmm-core/ppc_safe118_PSO_OPT/safe118.c new file mode 100644 index 00000000000..9e642eed161 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_PSO_OPT/safe118.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe118_PSO_OPT/test.desc new file mode 100644 index 00000000000..73ceabc3f05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe118.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_RMO_ALL/safe118.c b/regression/goto-instrument-wmm-core/ppc_safe118_RMO_ALL/safe118.c new file mode 100644 index 00000000000..9e642eed161 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_RMO_ALL/safe118.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe118_RMO_ALL/test.desc new file mode 100644 index 00000000000..a7fd70b0973 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe118.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_RMO_OPC/safe118.c b/regression/goto-instrument-wmm-core/ppc_safe118_RMO_OPC/safe118.c new file mode 100644 index 00000000000..9e642eed161 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_RMO_OPC/safe118.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe118_RMO_OPC/test.desc new file mode 100644 index 00000000000..698f33206fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe118.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_RMO_OPT/safe118.c b/regression/goto-instrument-wmm-core/ppc_safe118_RMO_OPT/safe118.c new file mode 100644 index 00000000000..9e642eed161 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_RMO_OPT/safe118.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe118_RMO_OPT/test.desc new file mode 100644 index 00000000000..00e320ae1dc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe118.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_SC_SAFE/safe118.c b/regression/goto-instrument-wmm-core/ppc_safe118_SC_SAFE/safe118.c new file mode 100644 index 00000000000..9e642eed161 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_SC_SAFE/safe118.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe118_SC_SAFE/test.desc new file mode 100644 index 00000000000..42f96a163a2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe118.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_TSO_ALL/safe118.c b/regression/goto-instrument-wmm-core/ppc_safe118_TSO_ALL/safe118.c new file mode 100644 index 00000000000..9e642eed161 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_TSO_ALL/safe118.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe118_TSO_ALL/test.desc new file mode 100644 index 00000000000..882dadc3e2b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe118.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_TSO_OPC/safe118.c b/regression/goto-instrument-wmm-core/ppc_safe118_TSO_OPC/safe118.c new file mode 100644 index 00000000000..9e642eed161 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_TSO_OPC/safe118.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe118_TSO_OPC/test.desc new file mode 100644 index 00000000000..e22629c6a7b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe118.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_TSO_OPT/safe118.c b/regression/goto-instrument-wmm-core/ppc_safe118_TSO_OPT/safe118.c new file mode 100644 index 00000000000..9e642eed161 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_TSO_OPT/safe118.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + lwfence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe118_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe118_TSO_OPT/test.desc new file mode 100644 index 00000000000..fdf25910c40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe118_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe118.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_CAV11_ERROR/safe119.c b/regression/goto-instrument-wmm-core/ppc_safe119_CAV11_ERROR/safe119.c new file mode 100644 index 00000000000..d572f12c72b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_CAV11_ERROR/safe119.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe119_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..359217e6b94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe119.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_POWER_ALL/safe119.c b/regression/goto-instrument-wmm-core/ppc_safe119_POWER_ALL/safe119.c new file mode 100644 index 00000000000..d572f12c72b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_POWER_ALL/safe119.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe119_POWER_ALL/test.desc new file mode 100644 index 00000000000..c8b76df1b7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe119.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_POWER_OPC/safe119.c b/regression/goto-instrument-wmm-core/ppc_safe119_POWER_OPC/safe119.c new file mode 100644 index 00000000000..d572f12c72b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_POWER_OPC/safe119.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe119_POWER_OPC/test.desc new file mode 100644 index 00000000000..bdba116ed70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe119.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_POWER_OPT/safe119.c b/regression/goto-instrument-wmm-core/ppc_safe119_POWER_OPT/safe119.c new file mode 100644 index 00000000000..d572f12c72b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_POWER_OPT/safe119.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe119_POWER_OPT/test.desc new file mode 100644 index 00000000000..f78eb0a1ae9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe119.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_PSO_ALL/safe119.c b/regression/goto-instrument-wmm-core/ppc_safe119_PSO_ALL/safe119.c new file mode 100644 index 00000000000..d572f12c72b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_PSO_ALL/safe119.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe119_PSO_ALL/test.desc new file mode 100644 index 00000000000..af4a82c2e4b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe119.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_PSO_OPC/safe119.c b/regression/goto-instrument-wmm-core/ppc_safe119_PSO_OPC/safe119.c new file mode 100644 index 00000000000..d572f12c72b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_PSO_OPC/safe119.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe119_PSO_OPC/test.desc new file mode 100644 index 00000000000..a6ceb1d8def --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe119.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_PSO_OPT/safe119.c b/regression/goto-instrument-wmm-core/ppc_safe119_PSO_OPT/safe119.c new file mode 100644 index 00000000000..d572f12c72b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_PSO_OPT/safe119.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe119_PSO_OPT/test.desc new file mode 100644 index 00000000000..f45a9f1f076 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe119.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_RMO_ALL/safe119.c b/regression/goto-instrument-wmm-core/ppc_safe119_RMO_ALL/safe119.c new file mode 100644 index 00000000000..d572f12c72b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_RMO_ALL/safe119.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe119_RMO_ALL/test.desc new file mode 100644 index 00000000000..2665f75de06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe119.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_RMO_OPC/safe119.c b/regression/goto-instrument-wmm-core/ppc_safe119_RMO_OPC/safe119.c new file mode 100644 index 00000000000..d572f12c72b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_RMO_OPC/safe119.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe119_RMO_OPC/test.desc new file mode 100644 index 00000000000..4b4c4a9d3ac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe119.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_RMO_OPT/safe119.c b/regression/goto-instrument-wmm-core/ppc_safe119_RMO_OPT/safe119.c new file mode 100644 index 00000000000..d572f12c72b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_RMO_OPT/safe119.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe119_RMO_OPT/test.desc new file mode 100644 index 00000000000..a010a795136 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe119.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_SC_SAFE/safe119.c b/regression/goto-instrument-wmm-core/ppc_safe119_SC_SAFE/safe119.c new file mode 100644 index 00000000000..d572f12c72b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_SC_SAFE/safe119.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe119_SC_SAFE/test.desc new file mode 100644 index 00000000000..1b55081476f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe119.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_TSO_ALL/safe119.c b/regression/goto-instrument-wmm-core/ppc_safe119_TSO_ALL/safe119.c new file mode 100644 index 00000000000..d572f12c72b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_TSO_ALL/safe119.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe119_TSO_ALL/test.desc new file mode 100644 index 00000000000..b6d2ce89356 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe119.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_TSO_OPC/safe119.c b/regression/goto-instrument-wmm-core/ppc_safe119_TSO_OPC/safe119.c new file mode 100644 index 00000000000..d572f12c72b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_TSO_OPC/safe119.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe119_TSO_OPC/test.desc new file mode 100644 index 00000000000..6fe653ad7ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe119.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_TSO_OPT/safe119.c b/regression/goto-instrument-wmm-core/ppc_safe119_TSO_OPT/safe119.c new file mode 100644 index 00000000000..d572f12c72b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_TSO_OPT/safe119.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 2; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 2 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe119_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe119_TSO_OPT/test.desc new file mode 100644 index 00000000000..8990a21695b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe119_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe119.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_CAV11_SAFE/safe120.c b/regression/goto-instrument-wmm-core/ppc_safe120_CAV11_SAFE/safe120.c new file mode 100644 index 00000000000..38b17611f81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_CAV11_SAFE/safe120.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe120_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..f4b15cf1bb8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe120.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_POWER_ALL/safe120.c b/regression/goto-instrument-wmm-core/ppc_safe120_POWER_ALL/safe120.c new file mode 100644 index 00000000000..38b17611f81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_POWER_ALL/safe120.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe120_POWER_ALL/test.desc new file mode 100644 index 00000000000..8b3f0b6a254 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe120.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_POWER_OPC/safe120.c b/regression/goto-instrument-wmm-core/ppc_safe120_POWER_OPC/safe120.c new file mode 100644 index 00000000000..38b17611f81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_POWER_OPC/safe120.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe120_POWER_OPC/test.desc new file mode 100644 index 00000000000..1061be1d532 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe120.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_POWER_OPT/safe120.c b/regression/goto-instrument-wmm-core/ppc_safe120_POWER_OPT/safe120.c new file mode 100644 index 00000000000..38b17611f81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_POWER_OPT/safe120.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe120_POWER_OPT/test.desc new file mode 100644 index 00000000000..f6402747938 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe120.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_PSO_ALL/safe120.c b/regression/goto-instrument-wmm-core/ppc_safe120_PSO_ALL/safe120.c new file mode 100644 index 00000000000..38b17611f81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_PSO_ALL/safe120.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe120_PSO_ALL/test.desc new file mode 100644 index 00000000000..1b6723038ae --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe120.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_PSO_OPC/safe120.c b/regression/goto-instrument-wmm-core/ppc_safe120_PSO_OPC/safe120.c new file mode 100644 index 00000000000..38b17611f81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_PSO_OPC/safe120.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe120_PSO_OPC/test.desc new file mode 100644 index 00000000000..31f11b1d368 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe120.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_PSO_OPT/safe120.c b/regression/goto-instrument-wmm-core/ppc_safe120_PSO_OPT/safe120.c new file mode 100644 index 00000000000..38b17611f81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_PSO_OPT/safe120.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe120_PSO_OPT/test.desc new file mode 100644 index 00000000000..1f70586820d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe120.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_RMO_ALL/safe120.c b/regression/goto-instrument-wmm-core/ppc_safe120_RMO_ALL/safe120.c new file mode 100644 index 00000000000..38b17611f81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_RMO_ALL/safe120.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe120_RMO_ALL/test.desc new file mode 100644 index 00000000000..d7a5c4f595c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe120.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_RMO_OPC/safe120.c b/regression/goto-instrument-wmm-core/ppc_safe120_RMO_OPC/safe120.c new file mode 100644 index 00000000000..38b17611f81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_RMO_OPC/safe120.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe120_RMO_OPC/test.desc new file mode 100644 index 00000000000..dd6656f132f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe120.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_RMO_OPT/safe120.c b/regression/goto-instrument-wmm-core/ppc_safe120_RMO_OPT/safe120.c new file mode 100644 index 00000000000..38b17611f81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_RMO_OPT/safe120.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe120_RMO_OPT/test.desc new file mode 100644 index 00000000000..e75e0a2280b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe120.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_SC_SAFE/safe120.c b/regression/goto-instrument-wmm-core/ppc_safe120_SC_SAFE/safe120.c new file mode 100644 index 00000000000..38b17611f81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_SC_SAFE/safe120.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe120_SC_SAFE/test.desc new file mode 100644 index 00000000000..1398fb7bc41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe120.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_TSO_ALL/safe120.c b/regression/goto-instrument-wmm-core/ppc_safe120_TSO_ALL/safe120.c new file mode 100644 index 00000000000..38b17611f81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_TSO_ALL/safe120.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe120_TSO_ALL/test.desc new file mode 100644 index 00000000000..32bf11f728d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe120.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_TSO_OPC/safe120.c b/regression/goto-instrument-wmm-core/ppc_safe120_TSO_OPC/safe120.c new file mode 100644 index 00000000000..38b17611f81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_TSO_OPC/safe120.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe120_TSO_OPC/test.desc new file mode 100644 index 00000000000..e22e4260019 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe120.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_TSO_OPT/safe120.c b/regression/goto-instrument-wmm-core/ppc_safe120_TSO_OPT/safe120.c new file mode 100644 index 00000000000..38b17611f81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_TSO_OPT/safe120.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe120_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe120_TSO_OPT/test.desc new file mode 100644 index 00000000000..9a485ddd131 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe120_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe120.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_CAV11_SAFE/safe121.c b/regression/goto-instrument-wmm-core/ppc_safe121_CAV11_SAFE/safe121.c new file mode 100644 index 00000000000..6ed27727ad5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_CAV11_SAFE/safe121.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe121_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..0d0861e3df1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe121.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_POWER_ALL/safe121.c b/regression/goto-instrument-wmm-core/ppc_safe121_POWER_ALL/safe121.c new file mode 100644 index 00000000000..6ed27727ad5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_POWER_ALL/safe121.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe121_POWER_ALL/test.desc new file mode 100644 index 00000000000..e7fc4bc5f9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe121.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_POWER_OPC/safe121.c b/regression/goto-instrument-wmm-core/ppc_safe121_POWER_OPC/safe121.c new file mode 100644 index 00000000000..6ed27727ad5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_POWER_OPC/safe121.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe121_POWER_OPC/test.desc new file mode 100644 index 00000000000..540a9cf33ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe121.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_POWER_OPT/safe121.c b/regression/goto-instrument-wmm-core/ppc_safe121_POWER_OPT/safe121.c new file mode 100644 index 00000000000..6ed27727ad5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_POWER_OPT/safe121.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe121_POWER_OPT/test.desc new file mode 100644 index 00000000000..7463db1e9f9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe121.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_PSO_ALL/safe121.c b/regression/goto-instrument-wmm-core/ppc_safe121_PSO_ALL/safe121.c new file mode 100644 index 00000000000..6ed27727ad5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_PSO_ALL/safe121.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe121_PSO_ALL/test.desc new file mode 100644 index 00000000000..3710bac678f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe121.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_PSO_OPC/safe121.c b/regression/goto-instrument-wmm-core/ppc_safe121_PSO_OPC/safe121.c new file mode 100644 index 00000000000..6ed27727ad5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_PSO_OPC/safe121.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe121_PSO_OPC/test.desc new file mode 100644 index 00000000000..5fb0ce761a9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe121.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_PSO_OPT/safe121.c b/regression/goto-instrument-wmm-core/ppc_safe121_PSO_OPT/safe121.c new file mode 100644 index 00000000000..6ed27727ad5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_PSO_OPT/safe121.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe121_PSO_OPT/test.desc new file mode 100644 index 00000000000..795f512006c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe121.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_RMO_ALL/safe121.c b/regression/goto-instrument-wmm-core/ppc_safe121_RMO_ALL/safe121.c new file mode 100644 index 00000000000..6ed27727ad5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_RMO_ALL/safe121.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe121_RMO_ALL/test.desc new file mode 100644 index 00000000000..01afa680982 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe121.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_RMO_OPC/safe121.c b/regression/goto-instrument-wmm-core/ppc_safe121_RMO_OPC/safe121.c new file mode 100644 index 00000000000..6ed27727ad5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_RMO_OPC/safe121.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe121_RMO_OPC/test.desc new file mode 100644 index 00000000000..a278f5b03a0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe121.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_RMO_OPT/safe121.c b/regression/goto-instrument-wmm-core/ppc_safe121_RMO_OPT/safe121.c new file mode 100644 index 00000000000..6ed27727ad5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_RMO_OPT/safe121.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe121_RMO_OPT/test.desc new file mode 100644 index 00000000000..31096414961 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe121.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_SC_SAFE/safe121.c b/regression/goto-instrument-wmm-core/ppc_safe121_SC_SAFE/safe121.c new file mode 100644 index 00000000000..6ed27727ad5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_SC_SAFE/safe121.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe121_SC_SAFE/test.desc new file mode 100644 index 00000000000..7a9a969f1ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe121.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_TSO_ALL/safe121.c b/regression/goto-instrument-wmm-core/ppc_safe121_TSO_ALL/safe121.c new file mode 100644 index 00000000000..6ed27727ad5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_TSO_ALL/safe121.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe121_TSO_ALL/test.desc new file mode 100644 index 00000000000..f1a622b6c44 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe121.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_TSO_OPC/safe121.c b/regression/goto-instrument-wmm-core/ppc_safe121_TSO_OPC/safe121.c new file mode 100644 index 00000000000..6ed27727ad5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_TSO_OPC/safe121.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe121_TSO_OPC/test.desc new file mode 100644 index 00000000000..c76c5f98b93 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe121.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_TSO_OPT/safe121.c b/regression/goto-instrument-wmm-core/ppc_safe121_TSO_OPT/safe121.c new file mode 100644 index 00000000000..6ed27727ad5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_TSO_OPT/safe121.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + z = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe121_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe121_TSO_OPT/test.desc new file mode 100644 index 00000000000..f08355e1e02 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe121_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe121.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_CAV11_ERROR/safe122.c b/regression/goto-instrument-wmm-core/ppc_safe122_CAV11_ERROR/safe122.c new file mode 100644 index 00000000000..8074537bea3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_CAV11_ERROR/safe122.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe122_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..8051e4eca79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe122.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_POWER_ALL/safe122.c b/regression/goto-instrument-wmm-core/ppc_safe122_POWER_ALL/safe122.c new file mode 100644 index 00000000000..8074537bea3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_POWER_ALL/safe122.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe122_POWER_ALL/test.desc new file mode 100644 index 00000000000..8c10df2e2b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe122.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_POWER_OPC/safe122.c b/regression/goto-instrument-wmm-core/ppc_safe122_POWER_OPC/safe122.c new file mode 100644 index 00000000000..8074537bea3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_POWER_OPC/safe122.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe122_POWER_OPC/test.desc new file mode 100644 index 00000000000..4ffa1c2f322 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe122.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_POWER_OPT/safe122.c b/regression/goto-instrument-wmm-core/ppc_safe122_POWER_OPT/safe122.c new file mode 100644 index 00000000000..8074537bea3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_POWER_OPT/safe122.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe122_POWER_OPT/test.desc new file mode 100644 index 00000000000..d4cc387050b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe122.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_PSO_ALL/safe122.c b/regression/goto-instrument-wmm-core/ppc_safe122_PSO_ALL/safe122.c new file mode 100644 index 00000000000..8074537bea3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_PSO_ALL/safe122.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe122_PSO_ALL/test.desc new file mode 100644 index 00000000000..0d6282ecf36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe122.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_PSO_OPC/safe122.c b/regression/goto-instrument-wmm-core/ppc_safe122_PSO_OPC/safe122.c new file mode 100644 index 00000000000..8074537bea3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_PSO_OPC/safe122.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe122_PSO_OPC/test.desc new file mode 100644 index 00000000000..3efab77aac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe122.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_PSO_OPT/safe122.c b/regression/goto-instrument-wmm-core/ppc_safe122_PSO_OPT/safe122.c new file mode 100644 index 00000000000..8074537bea3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_PSO_OPT/safe122.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe122_PSO_OPT/test.desc new file mode 100644 index 00000000000..3ee2b9fa4b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe122.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_RMO_ALL/safe122.c b/regression/goto-instrument-wmm-core/ppc_safe122_RMO_ALL/safe122.c new file mode 100644 index 00000000000..8074537bea3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_RMO_ALL/safe122.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe122_RMO_ALL/test.desc new file mode 100644 index 00000000000..f0e6b99e2bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe122.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_RMO_OPC/safe122.c b/regression/goto-instrument-wmm-core/ppc_safe122_RMO_OPC/safe122.c new file mode 100644 index 00000000000..8074537bea3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_RMO_OPC/safe122.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe122_RMO_OPC/test.desc new file mode 100644 index 00000000000..bef78647eb2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe122.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_RMO_OPT/safe122.c b/regression/goto-instrument-wmm-core/ppc_safe122_RMO_OPT/safe122.c new file mode 100644 index 00000000000..8074537bea3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_RMO_OPT/safe122.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe122_RMO_OPT/test.desc new file mode 100644 index 00000000000..36fe37458e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe122.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_SC_SAFE/safe122.c b/regression/goto-instrument-wmm-core/ppc_safe122_SC_SAFE/safe122.c new file mode 100644 index 00000000000..8074537bea3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_SC_SAFE/safe122.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe122_SC_SAFE/test.desc new file mode 100644 index 00000000000..0e487b1a368 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe122.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_TSO_ALL/safe122.c b/regression/goto-instrument-wmm-core/ppc_safe122_TSO_ALL/safe122.c new file mode 100644 index 00000000000..8074537bea3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_TSO_ALL/safe122.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe122_TSO_ALL/test.desc new file mode 100644 index 00000000000..5ed45ec6ef6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe122.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_TSO_OPC/safe122.c b/regression/goto-instrument-wmm-core/ppc_safe122_TSO_OPC/safe122.c new file mode 100644 index 00000000000..8074537bea3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_TSO_OPC/safe122.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe122_TSO_OPC/test.desc new file mode 100644 index 00000000000..b8efd793411 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe122.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_TSO_OPT/safe122.c b/regression/goto-instrument-wmm-core/ppc_safe122_TSO_OPT/safe122.c new file mode 100644 index 00000000000..8074537bea3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_TSO_OPT/safe122.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = 1; + y = __unbuffered_p0_r1; + lwfence(); + __unbuffered_p0_r3 = 2; + y = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + fence(); + __unbuffered_p1_r3 = 1; + x = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = x; + fence(); + __unbuffered_p2_r3 = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_r1 == 2 && __unbuffered_p2_r1 == 1 && + __unbuffered_p2_r3 == 0), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe122_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe122_TSO_OPT/test.desc new file mode 100644 index 00000000000..2bbaf5279be --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe122_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe122.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_CAV11_ERROR/safe123.c b/regression/goto-instrument-wmm-core/ppc_safe123_CAV11_ERROR/safe123.c new file mode 100644 index 00000000000..a62447bf8e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_CAV11_ERROR/safe123.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 2; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/ppc_safe123_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..5f9aa5416ca --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe123.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_POWER_ALL/safe123.c b/regression/goto-instrument-wmm-core/ppc_safe123_POWER_ALL/safe123.c new file mode 100644 index 00000000000..a62447bf8e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_POWER_ALL/safe123.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 2; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe123_POWER_ALL/test.desc new file mode 100644 index 00000000000..d5f9d7eea20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe123.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_POWER_OPC/safe123.c b/regression/goto-instrument-wmm-core/ppc_safe123_POWER_OPC/safe123.c new file mode 100644 index 00000000000..a62447bf8e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_POWER_OPC/safe123.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 2; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe123_POWER_OPC/test.desc new file mode 100644 index 00000000000..383e6121268 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe123.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_POWER_OPT/safe123.c b/regression/goto-instrument-wmm-core/ppc_safe123_POWER_OPT/safe123.c new file mode 100644 index 00000000000..a62447bf8e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_POWER_OPT/safe123.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 2; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe123_POWER_OPT/test.desc new file mode 100644 index 00000000000..98ba1232c4c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe123.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_PSO_ALL/safe123.c b/regression/goto-instrument-wmm-core/ppc_safe123_PSO_ALL/safe123.c new file mode 100644 index 00000000000..a62447bf8e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_PSO_ALL/safe123.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 2; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe123_PSO_ALL/test.desc new file mode 100644 index 00000000000..030ecd8f200 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe123.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_PSO_OPC/safe123.c b/regression/goto-instrument-wmm-core/ppc_safe123_PSO_OPC/safe123.c new file mode 100644 index 00000000000..a62447bf8e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_PSO_OPC/safe123.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 2; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe123_PSO_OPC/test.desc new file mode 100644 index 00000000000..a3f2acac7ac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe123.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_PSO_OPT/safe123.c b/regression/goto-instrument-wmm-core/ppc_safe123_PSO_OPT/safe123.c new file mode 100644 index 00000000000..a62447bf8e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_PSO_OPT/safe123.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 2; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe123_PSO_OPT/test.desc new file mode 100644 index 00000000000..1458cfaeb1f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe123.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_RMO_ALL/safe123.c b/regression/goto-instrument-wmm-core/ppc_safe123_RMO_ALL/safe123.c new file mode 100644 index 00000000000..a62447bf8e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_RMO_ALL/safe123.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 2; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe123_RMO_ALL/test.desc new file mode 100644 index 00000000000..c22bdc19670 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe123.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_RMO_OPC/safe123.c b/regression/goto-instrument-wmm-core/ppc_safe123_RMO_OPC/safe123.c new file mode 100644 index 00000000000..a62447bf8e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_RMO_OPC/safe123.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 2; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe123_RMO_OPC/test.desc new file mode 100644 index 00000000000..03e6a182ac0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe123.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_RMO_OPT/safe123.c b/regression/goto-instrument-wmm-core/ppc_safe123_RMO_OPT/safe123.c new file mode 100644 index 00000000000..a62447bf8e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_RMO_OPT/safe123.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 2; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe123_RMO_OPT/test.desc new file mode 100644 index 00000000000..a184f75009b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe123.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_SC_SAFE/safe123.c b/regression/goto-instrument-wmm-core/ppc_safe123_SC_SAFE/safe123.c new file mode 100644 index 00000000000..a62447bf8e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_SC_SAFE/safe123.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 2; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe123_SC_SAFE/test.desc new file mode 100644 index 00000000000..4c3891738f3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe123.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_TSO_ALL/safe123.c b/regression/goto-instrument-wmm-core/ppc_safe123_TSO_ALL/safe123.c new file mode 100644 index 00000000000..a62447bf8e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_TSO_ALL/safe123.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 2; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe123_TSO_ALL/test.desc new file mode 100644 index 00000000000..ab3fd901d8a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe123.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_TSO_OPC/safe123.c b/regression/goto-instrument-wmm-core/ppc_safe123_TSO_OPC/safe123.c new file mode 100644 index 00000000000..a62447bf8e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_TSO_OPC/safe123.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 2; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe123_TSO_OPC/test.desc new file mode 100644 index 00000000000..094aa4bca1c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe123.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_TSO_OPT/safe123.c b/regression/goto-instrument-wmm-core/ppc_safe123_TSO_OPT/safe123.c new file mode 100644 index 00000000000..a62447bf8e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_TSO_OPT/safe123.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 2; + y = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_r1 == 2 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe123_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe123_TSO_OPT/test.desc new file mode 100644 index 00000000000..af4e16e34ac --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe123_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe123.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_CAV11_SAFE/safe124.c b/regression/goto-instrument-wmm-core/ppc_safe124_CAV11_SAFE/safe124.c new file mode 100644 index 00000000000..9219c7ecaf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_CAV11_SAFE/safe124.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe124_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..eb565298c38 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe124.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_POWER_ALL/safe124.c b/regression/goto-instrument-wmm-core/ppc_safe124_POWER_ALL/safe124.c new file mode 100644 index 00000000000..9219c7ecaf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_POWER_ALL/safe124.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe124_POWER_ALL/test.desc new file mode 100644 index 00000000000..721b26edf54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe124.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_POWER_OPC/safe124.c b/regression/goto-instrument-wmm-core/ppc_safe124_POWER_OPC/safe124.c new file mode 100644 index 00000000000..9219c7ecaf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_POWER_OPC/safe124.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe124_POWER_OPC/test.desc new file mode 100644 index 00000000000..f11b22019db --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe124.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_POWER_OPT/safe124.c b/regression/goto-instrument-wmm-core/ppc_safe124_POWER_OPT/safe124.c new file mode 100644 index 00000000000..9219c7ecaf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_POWER_OPT/safe124.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe124_POWER_OPT/test.desc new file mode 100644 index 00000000000..c27fe04e49c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe124.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_PSO_ALL/safe124.c b/regression/goto-instrument-wmm-core/ppc_safe124_PSO_ALL/safe124.c new file mode 100644 index 00000000000..9219c7ecaf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_PSO_ALL/safe124.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe124_PSO_ALL/test.desc new file mode 100644 index 00000000000..084641e9cc1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe124.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_PSO_OPC/safe124.c b/regression/goto-instrument-wmm-core/ppc_safe124_PSO_OPC/safe124.c new file mode 100644 index 00000000000..9219c7ecaf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_PSO_OPC/safe124.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe124_PSO_OPC/test.desc new file mode 100644 index 00000000000..08a68251986 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe124.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_PSO_OPT/safe124.c b/regression/goto-instrument-wmm-core/ppc_safe124_PSO_OPT/safe124.c new file mode 100644 index 00000000000..9219c7ecaf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_PSO_OPT/safe124.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe124_PSO_OPT/test.desc new file mode 100644 index 00000000000..2a169991e63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe124.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_RMO_ALL/safe124.c b/regression/goto-instrument-wmm-core/ppc_safe124_RMO_ALL/safe124.c new file mode 100644 index 00000000000..9219c7ecaf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_RMO_ALL/safe124.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe124_RMO_ALL/test.desc new file mode 100644 index 00000000000..6a1a3ec74cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe124.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_RMO_OPC/safe124.c b/regression/goto-instrument-wmm-core/ppc_safe124_RMO_OPC/safe124.c new file mode 100644 index 00000000000..9219c7ecaf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_RMO_OPC/safe124.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe124_RMO_OPC/test.desc new file mode 100644 index 00000000000..22954d53f76 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe124.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_RMO_OPT/safe124.c b/regression/goto-instrument-wmm-core/ppc_safe124_RMO_OPT/safe124.c new file mode 100644 index 00000000000..9219c7ecaf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_RMO_OPT/safe124.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe124_RMO_OPT/test.desc new file mode 100644 index 00000000000..5cc773ec5db --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe124.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_SC_SAFE/safe124.c b/regression/goto-instrument-wmm-core/ppc_safe124_SC_SAFE/safe124.c new file mode 100644 index 00000000000..9219c7ecaf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_SC_SAFE/safe124.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe124_SC_SAFE/test.desc new file mode 100644 index 00000000000..cf4a3223b9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe124.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_TSO_ALL/safe124.c b/regression/goto-instrument-wmm-core/ppc_safe124_TSO_ALL/safe124.c new file mode 100644 index 00000000000..9219c7ecaf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_TSO_ALL/safe124.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe124_TSO_ALL/test.desc new file mode 100644 index 00000000000..284f144910a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe124.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_TSO_OPC/safe124.c b/regression/goto-instrument-wmm-core/ppc_safe124_TSO_OPC/safe124.c new file mode 100644 index 00000000000..9219c7ecaf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_TSO_OPC/safe124.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe124_TSO_OPC/test.desc new file mode 100644 index 00000000000..2384a36e4fb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe124.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_TSO_OPT/safe124.c b/regression/goto-instrument-wmm-core/ppc_safe124_TSO_OPT/safe124.c new file mode 100644 index 00000000000..9219c7ecaf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_TSO_OPT/safe124.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe124_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe124_TSO_OPT/test.desc new file mode 100644 index 00000000000..3f090bb0e05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe124_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe124.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_CAV11_SAFE/safe125.c b/regression/goto-instrument-wmm-core/ppc_safe125_CAV11_SAFE/safe125.c new file mode 100644 index 00000000000..d321b83bf29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_CAV11_SAFE/safe125.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe125_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..f9d97fb4e5d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe125.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_POWER_ALL/safe125.c b/regression/goto-instrument-wmm-core/ppc_safe125_POWER_ALL/safe125.c new file mode 100644 index 00000000000..d321b83bf29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_POWER_ALL/safe125.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe125_POWER_ALL/test.desc new file mode 100644 index 00000000000..a67bc13829c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe125.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_POWER_OPC/safe125.c b/regression/goto-instrument-wmm-core/ppc_safe125_POWER_OPC/safe125.c new file mode 100644 index 00000000000..d321b83bf29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_POWER_OPC/safe125.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe125_POWER_OPC/test.desc new file mode 100644 index 00000000000..a0bff0d8f97 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe125.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_POWER_OPT/safe125.c b/regression/goto-instrument-wmm-core/ppc_safe125_POWER_OPT/safe125.c new file mode 100644 index 00000000000..d321b83bf29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_POWER_OPT/safe125.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe125_POWER_OPT/test.desc new file mode 100644 index 00000000000..73193325642 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe125.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_PSO_ALL/safe125.c b/regression/goto-instrument-wmm-core/ppc_safe125_PSO_ALL/safe125.c new file mode 100644 index 00000000000..d321b83bf29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_PSO_ALL/safe125.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe125_PSO_ALL/test.desc new file mode 100644 index 00000000000..985940645a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe125.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_PSO_OPC/safe125.c b/regression/goto-instrument-wmm-core/ppc_safe125_PSO_OPC/safe125.c new file mode 100644 index 00000000000..d321b83bf29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_PSO_OPC/safe125.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe125_PSO_OPC/test.desc new file mode 100644 index 00000000000..50ccc6e038a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe125.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_PSO_OPT/safe125.c b/regression/goto-instrument-wmm-core/ppc_safe125_PSO_OPT/safe125.c new file mode 100644 index 00000000000..d321b83bf29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_PSO_OPT/safe125.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe125_PSO_OPT/test.desc new file mode 100644 index 00000000000..0987fbe309b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe125.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_RMO_ALL/safe125.c b/regression/goto-instrument-wmm-core/ppc_safe125_RMO_ALL/safe125.c new file mode 100644 index 00000000000..d321b83bf29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_RMO_ALL/safe125.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe125_RMO_ALL/test.desc new file mode 100644 index 00000000000..0211a2e3110 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe125.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_RMO_OPC/safe125.c b/regression/goto-instrument-wmm-core/ppc_safe125_RMO_OPC/safe125.c new file mode 100644 index 00000000000..d321b83bf29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_RMO_OPC/safe125.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe125_RMO_OPC/test.desc new file mode 100644 index 00000000000..46dd74005ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe125.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_RMO_OPT/safe125.c b/regression/goto-instrument-wmm-core/ppc_safe125_RMO_OPT/safe125.c new file mode 100644 index 00000000000..d321b83bf29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_RMO_OPT/safe125.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe125_RMO_OPT/test.desc new file mode 100644 index 00000000000..2537aa2ba72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe125.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_SC_SAFE/safe125.c b/regression/goto-instrument-wmm-core/ppc_safe125_SC_SAFE/safe125.c new file mode 100644 index 00000000000..d321b83bf29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_SC_SAFE/safe125.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_safe125_SC_SAFE/test.desc new file mode 100644 index 00000000000..3cae1d97a7e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe125.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_TSO_ALL/safe125.c b/regression/goto-instrument-wmm-core/ppc_safe125_TSO_ALL/safe125.c new file mode 100644 index 00000000000..d321b83bf29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_TSO_ALL/safe125.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_safe125_TSO_ALL/test.desc new file mode 100644 index 00000000000..175a3de6b13 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe125.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_TSO_OPC/safe125.c b/regression/goto-instrument-wmm-core/ppc_safe125_TSO_OPC/safe125.c new file mode 100644 index 00000000000..d321b83bf29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_TSO_OPC/safe125.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_safe125_TSO_OPC/test.desc new file mode 100644 index 00000000000..445f5f9c5d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe125.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_TSO_OPT/safe125.c b/regression/goto-instrument-wmm-core/ppc_safe125_TSO_OPT/safe125.c new file mode 100644 index 00000000000..d321b83bf29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_TSO_OPT/safe125.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + fence(); + __unbuffered_p0_r3 = 1; + x = __unbuffered_p0_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + fence(); + __unbuffered_p1_r3 = 1; + y = __unbuffered_p1_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + fence(); + __unbuffered_p2_r3 = 1; + z = __unbuffered_p2_r3; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_safe125_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_safe125_TSO_OPT/test.desc new file mode 100644 index 00000000000..0373c56713b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_safe125_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe125.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_thin000_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..99291f65788 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_CAV11_SAFE/thin000.c b/regression/goto-instrument-wmm-core/ppc_thin000_CAV11_SAFE/thin000.c new file mode 100644 index 00000000000..3c2deaeb8b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_CAV11_SAFE/thin000.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin000_POWER_ALL/test.desc new file mode 100644 index 00000000000..206a121cd6b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_POWER_ALL/thin000.c b/regression/goto-instrument-wmm-core/ppc_thin000_POWER_ALL/thin000.c new file mode 100644 index 00000000000..3c2deaeb8b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_POWER_ALL/thin000.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin000_POWER_OPC/test.desc new file mode 100644 index 00000000000..844c34c75f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_POWER_OPC/thin000.c b/regression/goto-instrument-wmm-core/ppc_thin000_POWER_OPC/thin000.c new file mode 100644 index 00000000000..3c2deaeb8b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_POWER_OPC/thin000.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin000_POWER_OPT/test.desc index 941426aca9a..4d30fd8c589 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin000_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_thin000_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk thin000.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin000_PSO_ALL/test.desc new file mode 100644 index 00000000000..14987c1a40d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_PSO_ALL/thin000.c b/regression/goto-instrument-wmm-core/ppc_thin000_PSO_ALL/thin000.c new file mode 100644 index 00000000000..3c2deaeb8b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_PSO_ALL/thin000.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin000_PSO_OPC/test.desc new file mode 100644 index 00000000000..11934155e15 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_PSO_OPC/thin000.c b/regression/goto-instrument-wmm-core/ppc_thin000_PSO_OPC/thin000.c new file mode 100644 index 00000000000..3c2deaeb8b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_PSO_OPC/thin000.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin000_PSO_OPT/test.desc new file mode 100644 index 00000000000..b41ae6d3cf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin000.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_PSO_OPT/thin000.c b/regression/goto-instrument-wmm-core/ppc_thin000_PSO_OPT/thin000.c new file mode 100644 index 00000000000..3c2deaeb8b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_PSO_OPT/thin000.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin000_RMO_ALL/test.desc new file mode 100644 index 00000000000..0af8ec743c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_RMO_ALL/thin000.c b/regression/goto-instrument-wmm-core/ppc_thin000_RMO_ALL/thin000.c new file mode 100644 index 00000000000..3c2deaeb8b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_RMO_ALL/thin000.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin000_RMO_OPC/test.desc new file mode 100644 index 00000000000..e1a52cc7da5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_RMO_OPC/thin000.c b/regression/goto-instrument-wmm-core/ppc_thin000_RMO_OPC/thin000.c new file mode 100644 index 00000000000..3c2deaeb8b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_RMO_OPC/thin000.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin000_RMO_OPT/test.desc new file mode 100644 index 00000000000..dcc2cf7c010 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin000.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_RMO_OPT/thin000.c b/regression/goto-instrument-wmm-core/ppc_thin000_RMO_OPT/thin000.c new file mode 100644 index 00000000000..3c2deaeb8b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_RMO_OPT/thin000.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_thin000_SC_SAFE/test.desc new file mode 100644 index 00000000000..37a0b6e7493 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_SC_SAFE/thin000.c b/regression/goto-instrument-wmm-core/ppc_thin000_SC_SAFE/thin000.c new file mode 100644 index 00000000000..3c2deaeb8b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_SC_SAFE/thin000.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin000_TSO_ALL/test.desc new file mode 100644 index 00000000000..a57eea02842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_TSO_ALL/thin000.c b/regression/goto-instrument-wmm-core/ppc_thin000_TSO_ALL/thin000.c new file mode 100644 index 00000000000..3c2deaeb8b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_TSO_ALL/thin000.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin000_TSO_OPC/test.desc new file mode 100644 index 00000000000..8c891ca82d3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_TSO_OPC/thin000.c b/regression/goto-instrument-wmm-core/ppc_thin000_TSO_OPC/thin000.c new file mode 100644 index 00000000000..3c2deaeb8b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_TSO_OPC/thin000.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin000_TSO_OPT/test.desc new file mode 100644 index 00000000000..87272d8e3b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin000.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin000_TSO_OPT/thin000.c b/regression/goto-instrument-wmm-core/ppc_thin000_TSO_OPT/thin000.c new file mode 100644 index 00000000000..3c2deaeb8b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin000_TSO_OPT/thin000.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = y; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_thin001_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..ff04027699d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_CAV11_SAFE/thin001.c b/regression/goto-instrument-wmm-core/ppc_thin001_CAV11_SAFE/thin001.c new file mode 100644 index 00000000000..22eb8177bee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_CAV11_SAFE/thin001.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin001_POWER_ALL/test.desc new file mode 100644 index 00000000000..55ed50caba8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_POWER_ALL/thin001.c b/regression/goto-instrument-wmm-core/ppc_thin001_POWER_ALL/thin001.c new file mode 100644 index 00000000000..22eb8177bee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_POWER_ALL/thin001.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin001_POWER_OPC/test.desc new file mode 100644 index 00000000000..1da247b8263 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_POWER_OPC/thin001.c b/regression/goto-instrument-wmm-core/ppc_thin001_POWER_OPC/thin001.c new file mode 100644 index 00000000000..22eb8177bee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_POWER_OPC/thin001.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin001_POWER_OPT/test.desc index 9aa83e7cc7d..8b8dda47ca8 100644 --- a/regression/goto-instrument-wmm-core/ppc_thin001_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/ppc_thin001_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk thin001.c POWER OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin001_PSO_ALL/test.desc new file mode 100644 index 00000000000..854a4e43be6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_PSO_ALL/thin001.c b/regression/goto-instrument-wmm-core/ppc_thin001_PSO_ALL/thin001.c new file mode 100644 index 00000000000..22eb8177bee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_PSO_ALL/thin001.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin001_PSO_OPC/test.desc new file mode 100644 index 00000000000..de9f61e16a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_PSO_OPC/thin001.c b/regression/goto-instrument-wmm-core/ppc_thin001_PSO_OPC/thin001.c new file mode 100644 index 00000000000..22eb8177bee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_PSO_OPC/thin001.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin001_PSO_OPT/test.desc new file mode 100644 index 00000000000..0fe1ad3f5f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin001.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_PSO_OPT/thin001.c b/regression/goto-instrument-wmm-core/ppc_thin001_PSO_OPT/thin001.c new file mode 100644 index 00000000000..22eb8177bee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_PSO_OPT/thin001.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin001_RMO_ALL/test.desc new file mode 100644 index 00000000000..59bf9c12f1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_RMO_ALL/thin001.c b/regression/goto-instrument-wmm-core/ppc_thin001_RMO_ALL/thin001.c new file mode 100644 index 00000000000..22eb8177bee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_RMO_ALL/thin001.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin001_RMO_OPC/test.desc new file mode 100644 index 00000000000..da0fbe56ec0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_RMO_OPC/thin001.c b/regression/goto-instrument-wmm-core/ppc_thin001_RMO_OPC/thin001.c new file mode 100644 index 00000000000..22eb8177bee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_RMO_OPC/thin001.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin001_RMO_OPT/test.desc new file mode 100644 index 00000000000..f1ac49c4197 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin001.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_RMO_OPT/thin001.c b/regression/goto-instrument-wmm-core/ppc_thin001_RMO_OPT/thin001.c new file mode 100644 index 00000000000..22eb8177bee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_RMO_OPT/thin001.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_thin001_SC_SAFE/test.desc new file mode 100644 index 00000000000..b70e6b95228 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_SC_SAFE/thin001.c b/regression/goto-instrument-wmm-core/ppc_thin001_SC_SAFE/thin001.c new file mode 100644 index 00000000000..22eb8177bee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_SC_SAFE/thin001.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin001_TSO_ALL/test.desc new file mode 100644 index 00000000000..06983a36df4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_TSO_ALL/thin001.c b/regression/goto-instrument-wmm-core/ppc_thin001_TSO_ALL/thin001.c new file mode 100644 index 00000000000..22eb8177bee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_TSO_ALL/thin001.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin001_TSO_OPC/test.desc new file mode 100644 index 00000000000..e50c1980dad --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_TSO_OPC/thin001.c b/regression/goto-instrument-wmm-core/ppc_thin001_TSO_OPC/thin001.c new file mode 100644 index 00000000000..22eb8177bee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_TSO_OPC/thin001.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin001_TSO_OPT/test.desc new file mode 100644 index 00000000000..f1330bbed8a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin001.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin001_TSO_OPT/thin001.c b/regression/goto-instrument-wmm-core/ppc_thin001_TSO_OPT/thin001.c new file mode 100644 index 00000000000..22eb8177bee --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin001_TSO_OPT/thin001.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_thin002_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..7c77ee04b86 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_CAV11_SAFE/thin002.c b/regression/goto-instrument-wmm-core/ppc_thin002_CAV11_SAFE/thin002.c new file mode 100644 index 00000000000..1e449c24353 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_CAV11_SAFE/thin002.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = z; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&a + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1 && __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin002_POWER_ALL/test.desc new file mode 100644 index 00000000000..9d17dc3e46d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_POWER_ALL/thin002.c b/regression/goto-instrument-wmm-core/ppc_thin002_POWER_ALL/thin002.c new file mode 100644 index 00000000000..1e449c24353 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_POWER_ALL/thin002.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = z; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&a + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1 && __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin002_POWER_OPC/test.desc new file mode 100644 index 00000000000..517f596edd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_POWER_OPC/thin002.c b/regression/goto-instrument-wmm-core/ppc_thin002_POWER_OPC/thin002.c new file mode 100644 index 00000000000..1e449c24353 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_POWER_OPC/thin002.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = z; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&a + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1 && __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin002_POWER_OPT/test.desc new file mode 100644 index 00000000000..91ea7031a85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin002.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_POWER_OPT/thin002.c b/regression/goto-instrument-wmm-core/ppc_thin002_POWER_OPT/thin002.c new file mode 100644 index 00000000000..1e449c24353 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_POWER_OPT/thin002.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = z; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&a + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1 && __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin002_PSO_ALL/test.desc new file mode 100644 index 00000000000..27f258f5969 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_PSO_ALL/thin002.c b/regression/goto-instrument-wmm-core/ppc_thin002_PSO_ALL/thin002.c new file mode 100644 index 00000000000..1e449c24353 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_PSO_ALL/thin002.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = z; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&a + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1 && __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin002_PSO_OPC/test.desc new file mode 100644 index 00000000000..04badb1ee04 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_PSO_OPC/thin002.c b/regression/goto-instrument-wmm-core/ppc_thin002_PSO_OPC/thin002.c new file mode 100644 index 00000000000..1e449c24353 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_PSO_OPC/thin002.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = z; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&a + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1 && __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin002_PSO_OPT/test.desc new file mode 100644 index 00000000000..887dda30747 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin002.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_PSO_OPT/thin002.c b/regression/goto-instrument-wmm-core/ppc_thin002_PSO_OPT/thin002.c new file mode 100644 index 00000000000..1e449c24353 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_PSO_OPT/thin002.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = z; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&a + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1 && __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin002_RMO_ALL/test.desc new file mode 100644 index 00000000000..02b1f7736e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_RMO_ALL/thin002.c b/regression/goto-instrument-wmm-core/ppc_thin002_RMO_ALL/thin002.c new file mode 100644 index 00000000000..1e449c24353 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_RMO_ALL/thin002.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = z; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&a + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1 && __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin002_RMO_OPC/test.desc new file mode 100644 index 00000000000..d346da56f73 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_RMO_OPC/thin002.c b/regression/goto-instrument-wmm-core/ppc_thin002_RMO_OPC/thin002.c new file mode 100644 index 00000000000..1e449c24353 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_RMO_OPC/thin002.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = z; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&a + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1 && __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin002_RMO_OPT/test.desc new file mode 100644 index 00000000000..c3fad802cdc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin002.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_RMO_OPT/thin002.c b/regression/goto-instrument-wmm-core/ppc_thin002_RMO_OPT/thin002.c new file mode 100644 index 00000000000..1e449c24353 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_RMO_OPT/thin002.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = z; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&a + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1 && __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_thin002_SC_SAFE/test.desc new file mode 100644 index 00000000000..68e8ebe7dd9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_SC_SAFE/thin002.c b/regression/goto-instrument-wmm-core/ppc_thin002_SC_SAFE/thin002.c new file mode 100644 index 00000000000..1e449c24353 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_SC_SAFE/thin002.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = z; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&a + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1 && __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin002_TSO_ALL/test.desc new file mode 100644 index 00000000000..196f0aa1461 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_TSO_ALL/thin002.c b/regression/goto-instrument-wmm-core/ppc_thin002_TSO_ALL/thin002.c new file mode 100644 index 00000000000..1e449c24353 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_TSO_ALL/thin002.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = z; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&a + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1 && __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin002_TSO_OPC/test.desc new file mode 100644 index 00000000000..cbd15fab380 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_TSO_OPC/thin002.c b/regression/goto-instrument-wmm-core/ppc_thin002_TSO_OPC/thin002.c new file mode 100644 index 00000000000..1e449c24353 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_TSO_OPC/thin002.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = z; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&a + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1 && __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin002_TSO_OPT/test.desc new file mode 100644 index 00000000000..6e9a9739346 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin002.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin002_TSO_OPT/thin002.c b/regression/goto-instrument-wmm-core/ppc_thin002_TSO_OPT/thin002.c new file mode 100644 index 00000000000..1e449c24353 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin002_TSO_OPT/thin002.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = x; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&y + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = y; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&z + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = z; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&a + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p1_r1 == 1 && + __unbuffered_p2_r1 == 1 && __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_thin003_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..b7d31882605 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin003.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_CAV11_SAFE/thin003.c b/regression/goto-instrument-wmm-core/ppc_thin003_CAV11_SAFE/thin003.c new file mode 100644 index 00000000000..3c921b19608 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_CAV11_SAFE/thin003.c @@ -0,0 +1,104 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = a; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&b + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin003_POWER_ALL/test.desc new file mode 100644 index 00000000000..5352cb8cd27 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin003.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_POWER_ALL/thin003.c b/regression/goto-instrument-wmm-core/ppc_thin003_POWER_ALL/thin003.c new file mode 100644 index 00000000000..3c921b19608 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_POWER_ALL/thin003.c @@ -0,0 +1,104 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = a; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&b + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin003_POWER_OPC/test.desc new file mode 100644 index 00000000000..409c8316c2d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin003.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_POWER_OPC/thin003.c b/regression/goto-instrument-wmm-core/ppc_thin003_POWER_OPC/thin003.c new file mode 100644 index 00000000000..3c921b19608 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_POWER_OPC/thin003.c @@ -0,0 +1,104 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = a; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&b + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin003_POWER_OPT/test.desc new file mode 100644 index 00000000000..5634f6221c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +thin003.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_POWER_OPT/thin003.c b/regression/goto-instrument-wmm-core/ppc_thin003_POWER_OPT/thin003.c new file mode 100644 index 00000000000..3c921b19608 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_POWER_OPT/thin003.c @@ -0,0 +1,104 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = a; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&b + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin003_PSO_ALL/test.desc new file mode 100644 index 00000000000..e788243c8eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin003.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_PSO_ALL/thin003.c b/regression/goto-instrument-wmm-core/ppc_thin003_PSO_ALL/thin003.c new file mode 100644 index 00000000000..3c921b19608 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_PSO_ALL/thin003.c @@ -0,0 +1,104 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = a; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&b + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin003_PSO_OPC/test.desc new file mode 100644 index 00000000000..1aa7b32001c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin003.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_PSO_OPC/thin003.c b/regression/goto-instrument-wmm-core/ppc_thin003_PSO_OPC/thin003.c new file mode 100644 index 00000000000..3c921b19608 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_PSO_OPC/thin003.c @@ -0,0 +1,104 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = a; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&b + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin003_PSO_OPT/test.desc new file mode 100644 index 00000000000..39c0c4798b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin003.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_PSO_OPT/thin003.c b/regression/goto-instrument-wmm-core/ppc_thin003_PSO_OPT/thin003.c new file mode 100644 index 00000000000..3c921b19608 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_PSO_OPT/thin003.c @@ -0,0 +1,104 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = a; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&b + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin003_RMO_ALL/test.desc new file mode 100644 index 00000000000..46c3aa502b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin003.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_RMO_ALL/thin003.c b/regression/goto-instrument-wmm-core/ppc_thin003_RMO_ALL/thin003.c new file mode 100644 index 00000000000..3c921b19608 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_RMO_ALL/thin003.c @@ -0,0 +1,104 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = a; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&b + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin003_RMO_OPC/test.desc new file mode 100644 index 00000000000..cda4d9b9dd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin003.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_RMO_OPC/thin003.c b/regression/goto-instrument-wmm-core/ppc_thin003_RMO_OPC/thin003.c new file mode 100644 index 00000000000..3c921b19608 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_RMO_OPC/thin003.c @@ -0,0 +1,104 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = a; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&b + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin003_RMO_OPT/test.desc new file mode 100644 index 00000000000..49fb2368289 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +thin003.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_RMO_OPT/thin003.c b/regression/goto-instrument-wmm-core/ppc_thin003_RMO_OPT/thin003.c new file mode 100644 index 00000000000..3c921b19608 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_RMO_OPT/thin003.c @@ -0,0 +1,104 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = a; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&b + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_thin003_SC_SAFE/test.desc new file mode 100644 index 00000000000..14ad253fb2d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin003.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_SC_SAFE/thin003.c b/regression/goto-instrument-wmm-core/ppc_thin003_SC_SAFE/thin003.c new file mode 100644 index 00000000000..3c921b19608 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_SC_SAFE/thin003.c @@ -0,0 +1,104 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = a; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&b + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin003_TSO_ALL/test.desc new file mode 100644 index 00000000000..2be8d1052e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin003.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_TSO_ALL/thin003.c b/regression/goto-instrument-wmm-core/ppc_thin003_TSO_ALL/thin003.c new file mode 100644 index 00000000000..3c921b19608 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_TSO_ALL/thin003.c @@ -0,0 +1,104 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = a; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&b + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin003_TSO_OPC/test.desc new file mode 100644 index 00000000000..01756ea41d8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin003.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_TSO_OPC/thin003.c b/regression/goto-instrument-wmm-core/ppc_thin003_TSO_OPC/thin003.c new file mode 100644 index 00000000000..3c921b19608 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_TSO_OPC/thin003.c @@ -0,0 +1,104 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = a; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&b + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin003_TSO_OPT/test.desc new file mode 100644 index 00000000000..21a531f661d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin003.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin003_TSO_OPT/thin003.c b/regression/goto-instrument-wmm-core/ppc_thin003_TSO_OPT/thin003.c new file mode 100644 index 00000000000..3c921b19608 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin003_TSO_OPT/thin003.c @@ -0,0 +1,104 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int __unbuffered_p3_r1 = 0; +int __unbuffered_p3_r3 = 0; +int __unbuffered_p3_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_r1 = a; + __unbuffered_p3_r3 = __unbuffered_p3_r1 ^ __unbuffered_p3_r1; + __unbuffered_p3_r4 = 1; + *(&b + __unbuffered_p3_r3) = __unbuffered_p3_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1 && + __unbuffered_p3_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_thin004_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..7d3790d7b1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin004.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_CAV11_SAFE/thin004.c b/regression/goto-instrument-wmm-core/ppc_thin004_CAV11_SAFE/thin004.c new file mode 100644 index 00000000000..637fb2acbb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_CAV11_SAFE/thin004.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin004_POWER_ALL/test.desc new file mode 100644 index 00000000000..5caed5f7b6b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin004.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_POWER_ALL/thin004.c b/regression/goto-instrument-wmm-core/ppc_thin004_POWER_ALL/thin004.c new file mode 100644 index 00000000000..637fb2acbb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_POWER_ALL/thin004.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin004_POWER_OPC/test.desc new file mode 100644 index 00000000000..57adf21b419 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin004.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_POWER_OPC/thin004.c b/regression/goto-instrument-wmm-core/ppc_thin004_POWER_OPC/thin004.c new file mode 100644 index 00000000000..637fb2acbb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_POWER_OPC/thin004.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin004_POWER_OPT/test.desc new file mode 100644 index 00000000000..23c693761b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +thin004.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_POWER_OPT/thin004.c b/regression/goto-instrument-wmm-core/ppc_thin004_POWER_OPT/thin004.c new file mode 100644 index 00000000000..637fb2acbb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_POWER_OPT/thin004.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin004_PSO_ALL/test.desc new file mode 100644 index 00000000000..544f442da0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin004.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_PSO_ALL/thin004.c b/regression/goto-instrument-wmm-core/ppc_thin004_PSO_ALL/thin004.c new file mode 100644 index 00000000000..637fb2acbb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_PSO_ALL/thin004.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin004_PSO_OPC/test.desc new file mode 100644 index 00000000000..27e570d590e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin004.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_PSO_OPC/thin004.c b/regression/goto-instrument-wmm-core/ppc_thin004_PSO_OPC/thin004.c new file mode 100644 index 00000000000..637fb2acbb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_PSO_OPC/thin004.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin004_PSO_OPT/test.desc new file mode 100644 index 00000000000..277bd88f628 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin004.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_PSO_OPT/thin004.c b/regression/goto-instrument-wmm-core/ppc_thin004_PSO_OPT/thin004.c new file mode 100644 index 00000000000..637fb2acbb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_PSO_OPT/thin004.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin004_RMO_ALL/test.desc new file mode 100644 index 00000000000..ea7aec15594 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin004.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_RMO_ALL/thin004.c b/regression/goto-instrument-wmm-core/ppc_thin004_RMO_ALL/thin004.c new file mode 100644 index 00000000000..637fb2acbb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_RMO_ALL/thin004.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin004_RMO_OPC/test.desc new file mode 100644 index 00000000000..47b0c61dc62 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin004.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_RMO_OPC/thin004.c b/regression/goto-instrument-wmm-core/ppc_thin004_RMO_OPC/thin004.c new file mode 100644 index 00000000000..637fb2acbb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_RMO_OPC/thin004.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin004_RMO_OPT/test.desc new file mode 100644 index 00000000000..cf355aa1765 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +thin004.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_RMO_OPT/thin004.c b/regression/goto-instrument-wmm-core/ppc_thin004_RMO_OPT/thin004.c new file mode 100644 index 00000000000..637fb2acbb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_RMO_OPT/thin004.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_thin004_SC_SAFE/test.desc new file mode 100644 index 00000000000..2c1da390f04 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin004.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_SC_SAFE/thin004.c b/regression/goto-instrument-wmm-core/ppc_thin004_SC_SAFE/thin004.c new file mode 100644 index 00000000000..637fb2acbb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_SC_SAFE/thin004.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin004_TSO_ALL/test.desc new file mode 100644 index 00000000000..16487b68b55 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin004.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_TSO_ALL/thin004.c b/regression/goto-instrument-wmm-core/ppc_thin004_TSO_ALL/thin004.c new file mode 100644 index 00000000000..637fb2acbb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_TSO_ALL/thin004.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin004_TSO_OPC/test.desc new file mode 100644 index 00000000000..1a714249808 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin004.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_TSO_OPC/thin004.c b/regression/goto-instrument-wmm-core/ppc_thin004_TSO_OPC/thin004.c new file mode 100644 index 00000000000..637fb2acbb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_TSO_OPC/thin004.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin004_TSO_OPT/test.desc new file mode 100644 index 00000000000..ccdf1f4c7b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin004.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin004_TSO_OPT/thin004.c b/regression/goto-instrument-wmm-core/ppc_thin004_TSO_OPT/thin004.c new file mode 100644 index 00000000000..637fb2acbb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin004_TSO_OPT/thin004.c @@ -0,0 +1,86 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = z; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&a + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_thin005_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..199c426d4f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin005.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_CAV11_SAFE/thin005.c b/regression/goto-instrument-wmm-core/ppc_thin005_CAV11_SAFE/thin005.c new file mode 100644 index 00000000000..144fce65ac0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_CAV11_SAFE/thin005.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin005_POWER_ALL/test.desc new file mode 100644 index 00000000000..bfafec05fc3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin005.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_POWER_ALL/thin005.c b/regression/goto-instrument-wmm-core/ppc_thin005_POWER_ALL/thin005.c new file mode 100644 index 00000000000..144fce65ac0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_POWER_ALL/thin005.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin005_POWER_OPC/test.desc new file mode 100644 index 00000000000..eb9e0c0a929 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin005.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_POWER_OPC/thin005.c b/regression/goto-instrument-wmm-core/ppc_thin005_POWER_OPC/thin005.c new file mode 100644 index 00000000000..144fce65ac0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_POWER_OPC/thin005.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin005_POWER_OPT/test.desc new file mode 100644 index 00000000000..af1b791ed92 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +thin005.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_POWER_OPT/thin005.c b/regression/goto-instrument-wmm-core/ppc_thin005_POWER_OPT/thin005.c new file mode 100644 index 00000000000..144fce65ac0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_POWER_OPT/thin005.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin005_PSO_ALL/test.desc new file mode 100644 index 00000000000..497232d6b2c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin005.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_PSO_ALL/thin005.c b/regression/goto-instrument-wmm-core/ppc_thin005_PSO_ALL/thin005.c new file mode 100644 index 00000000000..144fce65ac0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_PSO_ALL/thin005.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin005_PSO_OPC/test.desc new file mode 100644 index 00000000000..259167db827 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin005.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_PSO_OPC/thin005.c b/regression/goto-instrument-wmm-core/ppc_thin005_PSO_OPC/thin005.c new file mode 100644 index 00000000000..144fce65ac0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_PSO_OPC/thin005.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin005_PSO_OPT/test.desc new file mode 100644 index 00000000000..8002419d8c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin005.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_PSO_OPT/thin005.c b/regression/goto-instrument-wmm-core/ppc_thin005_PSO_OPT/thin005.c new file mode 100644 index 00000000000..144fce65ac0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_PSO_OPT/thin005.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin005_RMO_ALL/test.desc new file mode 100644 index 00000000000..b303e0d960f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin005.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_RMO_ALL/thin005.c b/regression/goto-instrument-wmm-core/ppc_thin005_RMO_ALL/thin005.c new file mode 100644 index 00000000000..144fce65ac0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_RMO_ALL/thin005.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin005_RMO_OPC/test.desc new file mode 100644 index 00000000000..bfac391085a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin005.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_RMO_OPC/thin005.c b/regression/goto-instrument-wmm-core/ppc_thin005_RMO_OPC/thin005.c new file mode 100644 index 00000000000..144fce65ac0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_RMO_OPC/thin005.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin005_RMO_OPT/test.desc new file mode 100644 index 00000000000..645495b6f0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +thin005.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_RMO_OPT/thin005.c b/regression/goto-instrument-wmm-core/ppc_thin005_RMO_OPT/thin005.c new file mode 100644 index 00000000000..144fce65ac0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_RMO_OPT/thin005.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_thin005_SC_SAFE/test.desc new file mode 100644 index 00000000000..3bcdee6dbbc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin005.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_SC_SAFE/thin005.c b/regression/goto-instrument-wmm-core/ppc_thin005_SC_SAFE/thin005.c new file mode 100644 index 00000000000..144fce65ac0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_SC_SAFE/thin005.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin005_TSO_ALL/test.desc new file mode 100644 index 00000000000..70b49a56383 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin005.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_TSO_ALL/thin005.c b/regression/goto-instrument-wmm-core/ppc_thin005_TSO_ALL/thin005.c new file mode 100644 index 00000000000..144fce65ac0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_TSO_ALL/thin005.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin005_TSO_OPC/test.desc new file mode 100644 index 00000000000..05c290755f2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin005.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_TSO_OPC/thin005.c b/regression/goto-instrument-wmm-core/ppc_thin005_TSO_OPC/thin005.c new file mode 100644 index 00000000000..144fce65ac0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_TSO_OPC/thin005.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin005_TSO_OPT/test.desc new file mode 100644 index 00000000000..7b5ff8260e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin005.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin005_TSO_OPT/thin005.c b/regression/goto-instrument-wmm-core/ppc_thin005_TSO_OPT/thin005.c new file mode 100644 index 00000000000..144fce65ac0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin005_TSO_OPT/thin005.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = z; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_thin006_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..37224b5898d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin006.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_CAV11_SAFE/thin006.c b/regression/goto-instrument-wmm-core/ppc_thin006_CAV11_SAFE/thin006.c new file mode 100644 index 00000000000..d6fc78bee30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_CAV11_SAFE/thin006.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = a; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&b + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin006_POWER_ALL/test.desc new file mode 100644 index 00000000000..a2a337935c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin006.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_POWER_ALL/thin006.c b/regression/goto-instrument-wmm-core/ppc_thin006_POWER_ALL/thin006.c new file mode 100644 index 00000000000..d6fc78bee30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_POWER_ALL/thin006.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = a; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&b + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin006_POWER_OPC/test.desc new file mode 100644 index 00000000000..ee11c168c44 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin006.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_POWER_OPC/thin006.c b/regression/goto-instrument-wmm-core/ppc_thin006_POWER_OPC/thin006.c new file mode 100644 index 00000000000..d6fc78bee30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_POWER_OPC/thin006.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = a; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&b + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin006_POWER_OPT/test.desc new file mode 100644 index 00000000000..204a58631e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +thin006.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_POWER_OPT/thin006.c b/regression/goto-instrument-wmm-core/ppc_thin006_POWER_OPT/thin006.c new file mode 100644 index 00000000000..d6fc78bee30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_POWER_OPT/thin006.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = a; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&b + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin006_PSO_ALL/test.desc new file mode 100644 index 00000000000..5362281570e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin006.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_PSO_ALL/thin006.c b/regression/goto-instrument-wmm-core/ppc_thin006_PSO_ALL/thin006.c new file mode 100644 index 00000000000..d6fc78bee30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_PSO_ALL/thin006.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = a; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&b + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin006_PSO_OPC/test.desc new file mode 100644 index 00000000000..a98626a650d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin006.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_PSO_OPC/thin006.c b/regression/goto-instrument-wmm-core/ppc_thin006_PSO_OPC/thin006.c new file mode 100644 index 00000000000..d6fc78bee30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_PSO_OPC/thin006.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = a; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&b + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin006_PSO_OPT/test.desc new file mode 100644 index 00000000000..e1be9f60f1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin006.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_PSO_OPT/thin006.c b/regression/goto-instrument-wmm-core/ppc_thin006_PSO_OPT/thin006.c new file mode 100644 index 00000000000..d6fc78bee30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_PSO_OPT/thin006.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = a; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&b + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin006_RMO_ALL/test.desc new file mode 100644 index 00000000000..3d49f3cc409 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin006.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_RMO_ALL/thin006.c b/regression/goto-instrument-wmm-core/ppc_thin006_RMO_ALL/thin006.c new file mode 100644 index 00000000000..d6fc78bee30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_RMO_ALL/thin006.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = a; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&b + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin006_RMO_OPC/test.desc new file mode 100644 index 00000000000..2dc6ce767f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin006.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_RMO_OPC/thin006.c b/regression/goto-instrument-wmm-core/ppc_thin006_RMO_OPC/thin006.c new file mode 100644 index 00000000000..d6fc78bee30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_RMO_OPC/thin006.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = a; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&b + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin006_RMO_OPT/test.desc new file mode 100644 index 00000000000..7b01e905122 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +thin006.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_RMO_OPT/thin006.c b/regression/goto-instrument-wmm-core/ppc_thin006_RMO_OPT/thin006.c new file mode 100644 index 00000000000..d6fc78bee30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_RMO_OPT/thin006.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = a; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&b + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_thin006_SC_SAFE/test.desc new file mode 100644 index 00000000000..7574798fd87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin006.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_SC_SAFE/thin006.c b/regression/goto-instrument-wmm-core/ppc_thin006_SC_SAFE/thin006.c new file mode 100644 index 00000000000..d6fc78bee30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_SC_SAFE/thin006.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = a; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&b + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin006_TSO_ALL/test.desc new file mode 100644 index 00000000000..98a0e26c864 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin006.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_TSO_ALL/thin006.c b/regression/goto-instrument-wmm-core/ppc_thin006_TSO_ALL/thin006.c new file mode 100644 index 00000000000..d6fc78bee30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_TSO_ALL/thin006.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = a; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&b + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin006_TSO_OPC/test.desc new file mode 100644 index 00000000000..9100c8b91a2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin006.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_TSO_OPC/thin006.c b/regression/goto-instrument-wmm-core/ppc_thin006_TSO_OPC/thin006.c new file mode 100644 index 00000000000..d6fc78bee30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_TSO_OPC/thin006.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = a; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&b + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin006_TSO_OPT/test.desc new file mode 100644 index 00000000000..237476f1f86 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin006.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin006_TSO_OPT/thin006.c b/regression/goto-instrument-wmm-core/ppc_thin006_TSO_OPT/thin006.c new file mode 100644 index 00000000000..d6fc78bee30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin006_TSO_OPT/thin006.c @@ -0,0 +1,95 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int __unbuffered_p2_r1 = 0; +int __unbuffered_p2_r3 = 0; +int __unbuffered_p2_r4 = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = b; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_r1 = a; + __unbuffered_p2_r3 = __unbuffered_p2_r1 ^ __unbuffered_p2_r1; + __unbuffered_p2_r4 = 1; + *(&b + __unbuffered_p2_r3) = __unbuffered_p2_r4; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1 && + __unbuffered_p2_r1 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_thin007_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..bd93d46f142 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin007.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_CAV11_SAFE/thin007.c b/regression/goto-instrument-wmm-core/ppc_thin007_CAV11_SAFE/thin007.c new file mode 100644 index 00000000000..30a19ffc944 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_CAV11_SAFE/thin007.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin007_POWER_ALL/test.desc new file mode 100644 index 00000000000..eecafb15d6f --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin007.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_POWER_ALL/thin007.c b/regression/goto-instrument-wmm-core/ppc_thin007_POWER_ALL/thin007.c new file mode 100644 index 00000000000..30a19ffc944 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_POWER_ALL/thin007.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin007_POWER_OPC/test.desc new file mode 100644 index 00000000000..11c7327ea0a --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin007.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_POWER_OPC/thin007.c b/regression/goto-instrument-wmm-core/ppc_thin007_POWER_OPC/thin007.c new file mode 100644 index 00000000000..30a19ffc944 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_POWER_OPC/thin007.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin007_POWER_OPT/test.desc new file mode 100644 index 00000000000..154a3e156d7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +thin007.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_POWER_OPT/thin007.c b/regression/goto-instrument-wmm-core/ppc_thin007_POWER_OPT/thin007.c new file mode 100644 index 00000000000..30a19ffc944 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_POWER_OPT/thin007.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin007_PSO_ALL/test.desc new file mode 100644 index 00000000000..bdfa25be9fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin007.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_PSO_ALL/thin007.c b/regression/goto-instrument-wmm-core/ppc_thin007_PSO_ALL/thin007.c new file mode 100644 index 00000000000..30a19ffc944 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_PSO_ALL/thin007.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin007_PSO_OPC/test.desc new file mode 100644 index 00000000000..0a192954e68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin007.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_PSO_OPC/thin007.c b/regression/goto-instrument-wmm-core/ppc_thin007_PSO_OPC/thin007.c new file mode 100644 index 00000000000..30a19ffc944 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_PSO_OPC/thin007.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin007_PSO_OPT/test.desc new file mode 100644 index 00000000000..d643d4e456e --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin007.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_PSO_OPT/thin007.c b/regression/goto-instrument-wmm-core/ppc_thin007_PSO_OPT/thin007.c new file mode 100644 index 00000000000..30a19ffc944 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_PSO_OPT/thin007.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin007_RMO_ALL/test.desc new file mode 100644 index 00000000000..02ef0033668 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin007.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_RMO_ALL/thin007.c b/regression/goto-instrument-wmm-core/ppc_thin007_RMO_ALL/thin007.c new file mode 100644 index 00000000000..30a19ffc944 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_RMO_ALL/thin007.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin007_RMO_OPC/test.desc new file mode 100644 index 00000000000..02083366cf7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin007.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_RMO_OPC/thin007.c b/regression/goto-instrument-wmm-core/ppc_thin007_RMO_OPC/thin007.c new file mode 100644 index 00000000000..30a19ffc944 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_RMO_OPC/thin007.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin007_RMO_OPT/test.desc new file mode 100644 index 00000000000..ec0d7a3f4c1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +thin007.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_RMO_OPT/thin007.c b/regression/goto-instrument-wmm-core/ppc_thin007_RMO_OPT/thin007.c new file mode 100644 index 00000000000..30a19ffc944 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_RMO_OPT/thin007.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/ppc_thin007_SC_SAFE/test.desc new file mode 100644 index 00000000000..6715c333b19 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin007.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_SC_SAFE/thin007.c b/regression/goto-instrument-wmm-core/ppc_thin007_SC_SAFE/thin007.c new file mode 100644 index 00000000000..30a19ffc944 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_SC_SAFE/thin007.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/ppc_thin007_TSO_ALL/test.desc new file mode 100644 index 00000000000..d0659917b14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin007.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_TSO_ALL/thin007.c b/regression/goto-instrument-wmm-core/ppc_thin007_TSO_ALL/thin007.c new file mode 100644 index 00000000000..30a19ffc944 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_TSO_ALL/thin007.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/ppc_thin007_TSO_OPC/test.desc new file mode 100644 index 00000000000..dde4c8408cc --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin007.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_TSO_OPC/thin007.c b/regression/goto-instrument-wmm-core/ppc_thin007_TSO_OPC/thin007.c new file mode 100644 index 00000000000..30a19ffc944 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_TSO_OPC/thin007.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/ppc_thin007_TSO_OPT/test.desc new file mode 100644 index 00000000000..55f0cb894a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin007.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/ppc_thin007_TSO_OPT/thin007.c b/regression/goto-instrument-wmm-core/ppc_thin007_TSO_OPT/thin007.c new file mode 100644 index 00000000000..30a19ffc944 --- /dev/null +++ b/regression/goto-instrument-wmm-core/ppc_thin007_TSO_OPT/thin007.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_r1 = 0; +int __unbuffered_p0_r3 = 0; +int __unbuffered_p0_r4 = 0; +int __unbuffered_p0_r6 = 0; +int __unbuffered_p0_r7 = 0; +int __unbuffered_p0_r8 = 0; +int __unbuffered_p1_r1 = 0; +int __unbuffered_p1_r3 = 0; +int __unbuffered_p1_r4 = 0; +int __unbuffered_p1_r6 = 0; +int __unbuffered_p1_r7 = 0; +int __unbuffered_p1_r8 = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_r1 = a; + __unbuffered_p0_r3 = __unbuffered_p0_r1 ^ __unbuffered_p0_r1; + __unbuffered_p0_r4 = 1; + *(&x + __unbuffered_p0_r3) = __unbuffered_p0_r4; + __unbuffered_p0_r6 = x; + __unbuffered_p0_r7 = __unbuffered_p0_r6 ^ __unbuffered_p0_r6; + __unbuffered_p0_r8 = 1; + *(&y + __unbuffered_p0_r7) = __unbuffered_p0_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_r1 = y; + __unbuffered_p1_r3 = __unbuffered_p1_r1 ^ __unbuffered_p1_r1; + __unbuffered_p1_r4 = 1; + *(&z + __unbuffered_p1_r3) = __unbuffered_p1_r4; + __unbuffered_p1_r6 = z; + __unbuffered_p1_r7 = __unbuffered_p1_r6 ^ __unbuffered_p1_r6; + __unbuffered_p1_r8 = 1; + *(&a + __unbuffered_p1_r7) = __unbuffered_p1_r8; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_r1 == 1 && __unbuffered_p0_r6 == 1 && + __unbuffered_p1_r1 == 1 && __unbuffered_p1_r6 == 1), + "Program was expected to be safe for PPC, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix000_CAV11_ERROR/mix000.c b/regression/goto-instrument-wmm-core/x86_mix000_CAV11_ERROR/mix000.c new file mode 100644 index 00000000000..418763d679d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_CAV11_ERROR/mix000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..208b989077e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix000_POWER_ALL/mix000.c b/regression/goto-instrument-wmm-core/x86_mix000_POWER_ALL/mix000.c new file mode 100644 index 00000000000..418763d679d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_POWER_ALL/mix000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix000_POWER_ALL/test.desc new file mode 100644 index 00000000000..96c5d2cbfde --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix000_POWER_OPC/mix000.c b/regression/goto-instrument-wmm-core/x86_mix000_POWER_OPC/mix000.c new file mode 100644 index 00000000000..418763d679d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_POWER_OPC/mix000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix000_POWER_OPC/test.desc new file mode 100644 index 00000000000..b7f9456c5a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix000_POWER_OPT/mix000.c b/regression/goto-instrument-wmm-core/x86_mix000_POWER_OPT/mix000.c new file mode 100644 index 00000000000..418763d679d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_POWER_OPT/mix000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix000_POWER_OPT/test.desc new file mode 100644 index 00000000000..688c5458932 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix000_PSO_ALL/mix000.c b/regression/goto-instrument-wmm-core/x86_mix000_PSO_ALL/mix000.c new file mode 100644 index 00000000000..418763d679d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_PSO_ALL/mix000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix000_PSO_ALL/test.desc new file mode 100644 index 00000000000..51e443970d6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix000_PSO_OPC/mix000.c b/regression/goto-instrument-wmm-core/x86_mix000_PSO_OPC/mix000.c new file mode 100644 index 00000000000..418763d679d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_PSO_OPC/mix000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix000_PSO_OPC/test.desc new file mode 100644 index 00000000000..4b6b70971c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix000_PSO_OPT/mix000.c b/regression/goto-instrument-wmm-core/x86_mix000_PSO_OPT/mix000.c new file mode 100644 index 00000000000..418763d679d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_PSO_OPT/mix000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix000_PSO_OPT/test.desc new file mode 100644 index 00000000000..1dac8ef6eeb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix000.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix000_RMO_ALL/mix000.c b/regression/goto-instrument-wmm-core/x86_mix000_RMO_ALL/mix000.c new file mode 100644 index 00000000000..418763d679d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_RMO_ALL/mix000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix000_RMO_ALL/test.desc new file mode 100644 index 00000000000..0e9afb1d812 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix000_RMO_OPC/mix000.c b/regression/goto-instrument-wmm-core/x86_mix000_RMO_OPC/mix000.c new file mode 100644 index 00000000000..418763d679d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_RMO_OPC/mix000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix000_RMO_OPC/test.desc new file mode 100644 index 00000000000..86b7c718960 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix000_RMO_OPT/mix000.c b/regression/goto-instrument-wmm-core/x86_mix000_RMO_OPT/mix000.c new file mode 100644 index 00000000000..418763d679d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_RMO_OPT/mix000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix000_RMO_OPT/test.desc new file mode 100644 index 00000000000..b04a9dc6843 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix000.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix000_SC_SAFE/mix000.c b/regression/goto-instrument-wmm-core/x86_mix000_SC_SAFE/mix000.c new file mode 100644 index 00000000000..418763d679d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_SC_SAFE/mix000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix000_SC_SAFE/test.desc new file mode 100644 index 00000000000..83fafb043c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix000_TSO_ALL/mix000.c b/regression/goto-instrument-wmm-core/x86_mix000_TSO_ALL/mix000.c new file mode 100644 index 00000000000..418763d679d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_TSO_ALL/mix000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix000_TSO_ALL/test.desc new file mode 100644 index 00000000000..bd964cf1794 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix000_TSO_OPC/mix000.c b/regression/goto-instrument-wmm-core/x86_mix000_TSO_OPC/mix000.c new file mode 100644 index 00000000000..418763d679d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_TSO_OPC/mix000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix000_TSO_OPC/test.desc new file mode 100644 index 00000000000..6b44e943465 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix000.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix000_TSO_OPT/mix000.c b/regression/goto-instrument-wmm-core/x86_mix000_TSO_OPT/mix000.c new file mode 100644 index 00000000000..418763d679d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_TSO_OPT/mix000.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix000_TSO_OPT/test.desc new file mode 100644 index 00000000000..8bf6217d80c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix000.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix001_CAV11_ERROR/mix001.c b/regression/goto-instrument-wmm-core/x86_mix001_CAV11_ERROR/mix001.c new file mode 100644 index 00000000000..cc403037a03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_CAV11_ERROR/mix001.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix001_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix001_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..e1fb21f6fb2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix001.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix001_POWER_ALL/mix001.c b/regression/goto-instrument-wmm-core/x86_mix001_POWER_ALL/mix001.c new file mode 100644 index 00000000000..cc403037a03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_POWER_ALL/mix001.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix001_POWER_ALL/test.desc new file mode 100644 index 00000000000..86fdec87a4a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix001_POWER_OPC/mix001.c b/regression/goto-instrument-wmm-core/x86_mix001_POWER_OPC/mix001.c new file mode 100644 index 00000000000..cc403037a03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_POWER_OPC/mix001.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix001_POWER_OPC/test.desc new file mode 100644 index 00000000000..da1d9ae4c61 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix001_POWER_OPT/mix001.c b/regression/goto-instrument-wmm-core/x86_mix001_POWER_OPT/mix001.c new file mode 100644 index 00000000000..cc403037a03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_POWER_OPT/mix001.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix001_POWER_OPT/test.desc new file mode 100644 index 00000000000..98d4d005d42 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix001.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix001_PSO_ALL/mix001.c b/regression/goto-instrument-wmm-core/x86_mix001_PSO_ALL/mix001.c new file mode 100644 index 00000000000..cc403037a03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_PSO_ALL/mix001.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix001_PSO_ALL/test.desc new file mode 100644 index 00000000000..18a0c005f07 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix001.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix001_PSO_OPC/mix001.c b/regression/goto-instrument-wmm-core/x86_mix001_PSO_OPC/mix001.c new file mode 100644 index 00000000000..cc403037a03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_PSO_OPC/mix001.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix001_PSO_OPC/test.desc new file mode 100644 index 00000000000..8e136ae8b5d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix001.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix001_PSO_OPT/mix001.c b/regression/goto-instrument-wmm-core/x86_mix001_PSO_OPT/mix001.c new file mode 100644 index 00000000000..cc403037a03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_PSO_OPT/mix001.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix001_PSO_OPT/test.desc new file mode 100644 index 00000000000..b606c56d41b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix001.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix001_RMO_ALL/mix001.c b/regression/goto-instrument-wmm-core/x86_mix001_RMO_ALL/mix001.c new file mode 100644 index 00000000000..cc403037a03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_RMO_ALL/mix001.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix001_RMO_ALL/test.desc new file mode 100644 index 00000000000..158d834b531 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix001.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix001_RMO_OPC/mix001.c b/regression/goto-instrument-wmm-core/x86_mix001_RMO_OPC/mix001.c new file mode 100644 index 00000000000..cc403037a03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_RMO_OPC/mix001.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix001_RMO_OPC/test.desc new file mode 100644 index 00000000000..92ea6d61bf0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix001.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix001_RMO_OPT/mix001.c b/regression/goto-instrument-wmm-core/x86_mix001_RMO_OPT/mix001.c new file mode 100644 index 00000000000..cc403037a03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_RMO_OPT/mix001.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix001_RMO_OPT/test.desc new file mode 100644 index 00000000000..8ca3b6d929d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix001.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix001_SC_SAFE/mix001.c b/regression/goto-instrument-wmm-core/x86_mix001_SC_SAFE/mix001.c new file mode 100644 index 00000000000..cc403037a03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_SC_SAFE/mix001.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix001_SC_SAFE/test.desc new file mode 100644 index 00000000000..b216dd6e04c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix001_TSO_ALL/mix001.c b/regression/goto-instrument-wmm-core/x86_mix001_TSO_ALL/mix001.c new file mode 100644 index 00000000000..cc403037a03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_TSO_ALL/mix001.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix001_TSO_ALL/test.desc new file mode 100644 index 00000000000..e5c787b6643 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix001.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix001_TSO_OPC/mix001.c b/regression/goto-instrument-wmm-core/x86_mix001_TSO_OPC/mix001.c new file mode 100644 index 00000000000..cc403037a03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_TSO_OPC/mix001.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix001_TSO_OPC/test.desc new file mode 100644 index 00000000000..18919bcc236 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix001.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix001_TSO_OPT/mix001.c b/regression/goto-instrument-wmm-core/x86_mix001_TSO_OPT/mix001.c new file mode 100644 index 00000000000..cc403037a03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_TSO_OPT/mix001.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix001_TSO_OPT/test.desc new file mode 100644 index 00000000000..40757358064 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix001.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix002_CAV11_ERROR/mix002.c b/regression/goto-instrument-wmm-core/x86_mix002_CAV11_ERROR/mix002.c new file mode 100644 index 00000000000..a1767d18fe6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_CAV11_ERROR/mix002.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix002_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix002_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..85c18932c11 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix002.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix002_POWER_ALL/mix002.c b/regression/goto-instrument-wmm-core/x86_mix002_POWER_ALL/mix002.c new file mode 100644 index 00000000000..a1767d18fe6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_POWER_ALL/mix002.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix002_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix002_POWER_ALL/test.desc new file mode 100644 index 00000000000..4ec7563621a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix002.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix002_POWER_OPC/mix002.c b/regression/goto-instrument-wmm-core/x86_mix002_POWER_OPC/mix002.c new file mode 100644 index 00000000000..a1767d18fe6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_POWER_OPC/mix002.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix002_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix002_POWER_OPC/test.desc new file mode 100644 index 00000000000..f92e780bd67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix002.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix002_POWER_OPT/mix002.c b/regression/goto-instrument-wmm-core/x86_mix002_POWER_OPT/mix002.c new file mode 100644 index 00000000000..a1767d18fe6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_POWER_OPT/mix002.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix002_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix002_POWER_OPT/test.desc new file mode 100644 index 00000000000..74eb5e30b96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix002.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix002_PSO_ALL/mix002.c b/regression/goto-instrument-wmm-core/x86_mix002_PSO_ALL/mix002.c new file mode 100644 index 00000000000..a1767d18fe6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_PSO_ALL/mix002.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix002_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix002_PSO_ALL/test.desc new file mode 100644 index 00000000000..358065668d3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix002.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix002_PSO_OPC/mix002.c b/regression/goto-instrument-wmm-core/x86_mix002_PSO_OPC/mix002.c new file mode 100644 index 00000000000..a1767d18fe6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_PSO_OPC/mix002.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix002_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix002_PSO_OPC/test.desc new file mode 100644 index 00000000000..8fbc63fd0ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix002.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix002_PSO_OPT/mix002.c b/regression/goto-instrument-wmm-core/x86_mix002_PSO_OPT/mix002.c new file mode 100644 index 00000000000..a1767d18fe6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_PSO_OPT/mix002.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix002_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix002_PSO_OPT/test.desc new file mode 100644 index 00000000000..5155b8c05da --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix002.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix002_RMO_ALL/mix002.c b/regression/goto-instrument-wmm-core/x86_mix002_RMO_ALL/mix002.c new file mode 100644 index 00000000000..a1767d18fe6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_RMO_ALL/mix002.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix002_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix002_RMO_ALL/test.desc new file mode 100644 index 00000000000..11ba9d06961 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix002.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix002_RMO_OPC/mix002.c b/regression/goto-instrument-wmm-core/x86_mix002_RMO_OPC/mix002.c new file mode 100644 index 00000000000..a1767d18fe6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_RMO_OPC/mix002.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix002_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix002_RMO_OPC/test.desc new file mode 100644 index 00000000000..6647aee21b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix002.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix002_RMO_OPT/mix002.c b/regression/goto-instrument-wmm-core/x86_mix002_RMO_OPT/mix002.c new file mode 100644 index 00000000000..a1767d18fe6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_RMO_OPT/mix002.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix002_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix002_RMO_OPT/test.desc new file mode 100644 index 00000000000..e6058e7e8c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix002.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix002_SC_SAFE/mix002.c b/regression/goto-instrument-wmm-core/x86_mix002_SC_SAFE/mix002.c new file mode 100644 index 00000000000..a1767d18fe6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_SC_SAFE/mix002.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix002_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix002_SC_SAFE/test.desc new file mode 100644 index 00000000000..1f73b71a0e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix002.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix002_TSO_ALL/mix002.c b/regression/goto-instrument-wmm-core/x86_mix002_TSO_ALL/mix002.c new file mode 100644 index 00000000000..a1767d18fe6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_TSO_ALL/mix002.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix002_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix002_TSO_ALL/test.desc new file mode 100644 index 00000000000..7eefac206d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix002.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix002_TSO_OPC/mix002.c b/regression/goto-instrument-wmm-core/x86_mix002_TSO_OPC/mix002.c new file mode 100644 index 00000000000..a1767d18fe6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_TSO_OPC/mix002.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix002_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix002_TSO_OPC/test.desc new file mode 100644 index 00000000000..0fd47e5d74e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix002.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix002_TSO_OPT/mix002.c b/regression/goto-instrument-wmm-core/x86_mix002_TSO_OPT/mix002.c new file mode 100644 index 00000000000..a1767d18fe6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_TSO_OPT/mix002.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix002_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix002_TSO_OPT/test.desc new file mode 100644 index 00000000000..329d87732bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix002_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix002.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix003_CAV11_ERROR/mix003.c b/regression/goto-instrument-wmm-core/x86_mix003_CAV11_ERROR/mix003.c new file mode 100644 index 00000000000..e791dbde50c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_CAV11_ERROR/mix003.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix003_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix003_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..e017eb17239 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix003.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix003_POWER_ALL/mix003.c b/regression/goto-instrument-wmm-core/x86_mix003_POWER_ALL/mix003.c new file mode 100644 index 00000000000..e791dbde50c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_POWER_ALL/mix003.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix003_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix003_POWER_ALL/test.desc new file mode 100644 index 00000000000..37e0cf5cae7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix003.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix003_POWER_OPC/mix003.c b/regression/goto-instrument-wmm-core/x86_mix003_POWER_OPC/mix003.c new file mode 100644 index 00000000000..e791dbde50c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_POWER_OPC/mix003.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix003_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix003_POWER_OPC/test.desc new file mode 100644 index 00000000000..c6a4c448e70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix003.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix003_POWER_OPT/mix003.c b/regression/goto-instrument-wmm-core/x86_mix003_POWER_OPT/mix003.c new file mode 100644 index 00000000000..e791dbde50c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_POWER_OPT/mix003.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix003_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix003_POWER_OPT/test.desc new file mode 100644 index 00000000000..88638d8a776 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix003.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix003_PSO_ALL/mix003.c b/regression/goto-instrument-wmm-core/x86_mix003_PSO_ALL/mix003.c new file mode 100644 index 00000000000..e791dbde50c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_PSO_ALL/mix003.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix003_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix003_PSO_ALL/test.desc new file mode 100644 index 00000000000..50ba86c30d8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix003.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix003_PSO_OPC/mix003.c b/regression/goto-instrument-wmm-core/x86_mix003_PSO_OPC/mix003.c new file mode 100644 index 00000000000..e791dbde50c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_PSO_OPC/mix003.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix003_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix003_PSO_OPC/test.desc new file mode 100644 index 00000000000..06cefa99ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix003.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix003_PSO_OPT/mix003.c b/regression/goto-instrument-wmm-core/x86_mix003_PSO_OPT/mix003.c new file mode 100644 index 00000000000..e791dbde50c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_PSO_OPT/mix003.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix003_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix003_PSO_OPT/test.desc new file mode 100644 index 00000000000..7cb39c3818d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix003.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix003_RMO_ALL/mix003.c b/regression/goto-instrument-wmm-core/x86_mix003_RMO_ALL/mix003.c new file mode 100644 index 00000000000..e791dbde50c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_RMO_ALL/mix003.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix003_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix003_RMO_ALL/test.desc new file mode 100644 index 00000000000..0f1d1a223ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix003.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix003_RMO_OPC/mix003.c b/regression/goto-instrument-wmm-core/x86_mix003_RMO_OPC/mix003.c new file mode 100644 index 00000000000..e791dbde50c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_RMO_OPC/mix003.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix003_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix003_RMO_OPC/test.desc new file mode 100644 index 00000000000..c85bcc0e47f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix003.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix003_RMO_OPT/mix003.c b/regression/goto-instrument-wmm-core/x86_mix003_RMO_OPT/mix003.c new file mode 100644 index 00000000000..e791dbde50c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_RMO_OPT/mix003.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix003_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix003_RMO_OPT/test.desc new file mode 100644 index 00000000000..fae74862f7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix003.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix003_SC_SAFE/mix003.c b/regression/goto-instrument-wmm-core/x86_mix003_SC_SAFE/mix003.c new file mode 100644 index 00000000000..e791dbde50c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_SC_SAFE/mix003.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix003_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix003_SC_SAFE/test.desc new file mode 100644 index 00000000000..1efd8ec48f3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix003.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix003_TSO_ALL/mix003.c b/regression/goto-instrument-wmm-core/x86_mix003_TSO_ALL/mix003.c new file mode 100644 index 00000000000..e791dbde50c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_TSO_ALL/mix003.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix003_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix003_TSO_ALL/test.desc new file mode 100644 index 00000000000..111b02da872 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix003.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix003_TSO_OPC/mix003.c b/regression/goto-instrument-wmm-core/x86_mix003_TSO_OPC/mix003.c new file mode 100644 index 00000000000..e791dbde50c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_TSO_OPC/mix003.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix003_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix003_TSO_OPC/test.desc new file mode 100644 index 00000000000..cc907046932 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix003.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix003_TSO_OPT/mix003.c b/regression/goto-instrument-wmm-core/x86_mix003_TSO_OPT/mix003.c new file mode 100644 index 00000000000..e791dbde50c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_TSO_OPT/mix003.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix003_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix003_TSO_OPT/test.desc new file mode 100644 index 00000000000..17c9a38f620 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix003_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix003.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix004_CAV11_ERROR/mix004.c b/regression/goto-instrument-wmm-core/x86_mix004_CAV11_ERROR/mix004.c new file mode 100644 index 00000000000..dfe58f001fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_CAV11_ERROR/mix004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix004_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix004_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..052214c1043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix004.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix004_POWER_ALL/mix004.c b/regression/goto-instrument-wmm-core/x86_mix004_POWER_ALL/mix004.c new file mode 100644 index 00000000000..dfe58f001fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_POWER_ALL/mix004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix004_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix004_POWER_ALL/test.desc new file mode 100644 index 00000000000..8ddec442e0a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix004.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix004_POWER_OPC/mix004.c b/regression/goto-instrument-wmm-core/x86_mix004_POWER_OPC/mix004.c new file mode 100644 index 00000000000..dfe58f001fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_POWER_OPC/mix004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix004_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix004_POWER_OPC/test.desc new file mode 100644 index 00000000000..4ddfe122c4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix004.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix004_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix004_POWER_OPT/test.desc index 894881903b4..4def3f56d07 100644 --- a/regression/goto-instrument-wmm-core/x86_mix004_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix004_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix004.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix004_PSO_ALL/mix004.c b/regression/goto-instrument-wmm-core/x86_mix004_PSO_ALL/mix004.c new file mode 100644 index 00000000000..dfe58f001fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_PSO_ALL/mix004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix004_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix004_PSO_ALL/test.desc new file mode 100644 index 00000000000..a07df40e00f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix004.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix004_PSO_OPC/mix004.c b/regression/goto-instrument-wmm-core/x86_mix004_PSO_OPC/mix004.c new file mode 100644 index 00000000000..dfe58f001fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_PSO_OPC/mix004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix004_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix004_PSO_OPC/test.desc new file mode 100644 index 00000000000..01e6f8400bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix004.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix004_PSO_OPT/mix004.c b/regression/goto-instrument-wmm-core/x86_mix004_PSO_OPT/mix004.c new file mode 100644 index 00000000000..dfe58f001fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_PSO_OPT/mix004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix004_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix004_PSO_OPT/test.desc new file mode 100644 index 00000000000..c914423aa1c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix004.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix004_RMO_ALL/mix004.c b/regression/goto-instrument-wmm-core/x86_mix004_RMO_ALL/mix004.c new file mode 100644 index 00000000000..dfe58f001fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_RMO_ALL/mix004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix004_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix004_RMO_ALL/test.desc new file mode 100644 index 00000000000..738b5120cb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix004.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix004_RMO_OPC/mix004.c b/regression/goto-instrument-wmm-core/x86_mix004_RMO_OPC/mix004.c new file mode 100644 index 00000000000..dfe58f001fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_RMO_OPC/mix004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix004_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix004_RMO_OPC/test.desc new file mode 100644 index 00000000000..750ae08c6f9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix004.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix004_RMO_OPT/mix004.c b/regression/goto-instrument-wmm-core/x86_mix004_RMO_OPT/mix004.c new file mode 100644 index 00000000000..dfe58f001fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_RMO_OPT/mix004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix004_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix004_RMO_OPT/test.desc new file mode 100644 index 00000000000..474f987bdf6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix004.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix004_SC_SAFE/mix004.c b/regression/goto-instrument-wmm-core/x86_mix004_SC_SAFE/mix004.c new file mode 100644 index 00000000000..dfe58f001fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_SC_SAFE/mix004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix004_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix004_SC_SAFE/test.desc new file mode 100644 index 00000000000..5453c22d1f3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix004.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix004_TSO_ALL/mix004.c b/regression/goto-instrument-wmm-core/x86_mix004_TSO_ALL/mix004.c new file mode 100644 index 00000000000..dfe58f001fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_TSO_ALL/mix004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix004_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix004_TSO_ALL/test.desc new file mode 100644 index 00000000000..43b238fb12f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix004.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix004_TSO_OPC/mix004.c b/regression/goto-instrument-wmm-core/x86_mix004_TSO_OPC/mix004.c new file mode 100644 index 00000000000..dfe58f001fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_TSO_OPC/mix004.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix004_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix004_TSO_OPC/test.desc new file mode 100644 index 00000000000..a6866256b97 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix004_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix004.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix004_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix004_TSO_OPT/test.desc index a816de43367..8879960833e 100644 --- a/regression/goto-instrument-wmm-core/x86_mix004_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix004_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix004.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix005_CAV11_ERROR/mix005.c b/regression/goto-instrument-wmm-core/x86_mix005_CAV11_ERROR/mix005.c new file mode 100644 index 00000000000..f81eb262192 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_CAV11_ERROR/mix005.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix005_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix005_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..75e5d29dda6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix005.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix005_POWER_ALL/mix005.c b/regression/goto-instrument-wmm-core/x86_mix005_POWER_ALL/mix005.c new file mode 100644 index 00000000000..f81eb262192 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_POWER_ALL/mix005.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix005_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix005_POWER_ALL/test.desc new file mode 100644 index 00000000000..2b08c16958b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix005.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix005_POWER_OPC/mix005.c b/regression/goto-instrument-wmm-core/x86_mix005_POWER_OPC/mix005.c new file mode 100644 index 00000000000..f81eb262192 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_POWER_OPC/mix005.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix005_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix005_POWER_OPC/test.desc new file mode 100644 index 00000000000..52e1411ef80 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix005.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix005_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix005_POWER_OPT/test.desc index 819ccefbe30..e1942dbe919 100644 --- a/regression/goto-instrument-wmm-core/x86_mix005_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix005_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix005.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix005_PSO_ALL/mix005.c b/regression/goto-instrument-wmm-core/x86_mix005_PSO_ALL/mix005.c new file mode 100644 index 00000000000..f81eb262192 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_PSO_ALL/mix005.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix005_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix005_PSO_ALL/test.desc new file mode 100644 index 00000000000..e93bf044496 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix005.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix005_PSO_OPC/mix005.c b/regression/goto-instrument-wmm-core/x86_mix005_PSO_OPC/mix005.c new file mode 100644 index 00000000000..f81eb262192 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_PSO_OPC/mix005.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix005_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix005_PSO_OPC/test.desc new file mode 100644 index 00000000000..d31488a2aec --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix005.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix005_PSO_OPT/mix005.c b/regression/goto-instrument-wmm-core/x86_mix005_PSO_OPT/mix005.c new file mode 100644 index 00000000000..f81eb262192 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_PSO_OPT/mix005.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix005_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix005_PSO_OPT/test.desc new file mode 100644 index 00000000000..2b49fee3bff --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix005.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix005_RMO_ALL/mix005.c b/regression/goto-instrument-wmm-core/x86_mix005_RMO_ALL/mix005.c new file mode 100644 index 00000000000..f81eb262192 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_RMO_ALL/mix005.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix005_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix005_RMO_ALL/test.desc new file mode 100644 index 00000000000..9fac86f0fd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix005.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix005_RMO_OPC/mix005.c b/regression/goto-instrument-wmm-core/x86_mix005_RMO_OPC/mix005.c new file mode 100644 index 00000000000..f81eb262192 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_RMO_OPC/mix005.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix005_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix005_RMO_OPC/test.desc new file mode 100644 index 00000000000..0fe2ebad36e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix005.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix005_RMO_OPT/mix005.c b/regression/goto-instrument-wmm-core/x86_mix005_RMO_OPT/mix005.c new file mode 100644 index 00000000000..f81eb262192 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_RMO_OPT/mix005.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix005_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix005_RMO_OPT/test.desc new file mode 100644 index 00000000000..f2c677e661a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix005.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix005_SC_SAFE/mix005.c b/regression/goto-instrument-wmm-core/x86_mix005_SC_SAFE/mix005.c new file mode 100644 index 00000000000..f81eb262192 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_SC_SAFE/mix005.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix005_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix005_SC_SAFE/test.desc new file mode 100644 index 00000000000..e0440dc2052 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix005.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix005_TSO_ALL/mix005.c b/regression/goto-instrument-wmm-core/x86_mix005_TSO_ALL/mix005.c new file mode 100644 index 00000000000..f81eb262192 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_TSO_ALL/mix005.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix005_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix005_TSO_ALL/test.desc new file mode 100644 index 00000000000..5c28fd8fe21 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix005.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix005_TSO_OPC/mix005.c b/regression/goto-instrument-wmm-core/x86_mix005_TSO_OPC/mix005.c new file mode 100644 index 00000000000..f81eb262192 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_TSO_OPC/mix005.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix005_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix005_TSO_OPC/test.desc new file mode 100644 index 00000000000..726962d067e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix005_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix005.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix005_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix005_TSO_OPT/test.desc index 8874cc39cd0..1db40ead9b6 100644 --- a/regression/goto-instrument-wmm-core/x86_mix005_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix005_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix005.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix006_CAV11_ERROR/mix006.c b/regression/goto-instrument-wmm-core/x86_mix006_CAV11_ERROR/mix006.c new file mode 100644 index 00000000000..e7b9adaed3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_CAV11_ERROR/mix006.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix006_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix006_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..f15947ee4c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix006.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix006_POWER_ALL/mix006.c b/regression/goto-instrument-wmm-core/x86_mix006_POWER_ALL/mix006.c new file mode 100644 index 00000000000..e7b9adaed3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_POWER_ALL/mix006.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix006_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix006_POWER_ALL/test.desc new file mode 100644 index 00000000000..09429a5c048 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix006.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix006_POWER_OPC/mix006.c b/regression/goto-instrument-wmm-core/x86_mix006_POWER_OPC/mix006.c new file mode 100644 index 00000000000..e7b9adaed3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_POWER_OPC/mix006.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix006_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix006_POWER_OPC/test.desc new file mode 100644 index 00000000000..d4a0dfe6a5e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix006.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix006_POWER_OPT/mix006.c b/regression/goto-instrument-wmm-core/x86_mix006_POWER_OPT/mix006.c new file mode 100644 index 00000000000..e7b9adaed3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_POWER_OPT/mix006.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix006_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix006_POWER_OPT/test.desc new file mode 100644 index 00000000000..f104124b2d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix006.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix006_PSO_ALL/mix006.c b/regression/goto-instrument-wmm-core/x86_mix006_PSO_ALL/mix006.c new file mode 100644 index 00000000000..e7b9adaed3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_PSO_ALL/mix006.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix006_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix006_PSO_ALL/test.desc new file mode 100644 index 00000000000..cd79c81a4fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix006.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix006_PSO_OPC/mix006.c b/regression/goto-instrument-wmm-core/x86_mix006_PSO_OPC/mix006.c new file mode 100644 index 00000000000..e7b9adaed3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_PSO_OPC/mix006.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix006_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix006_PSO_OPC/test.desc new file mode 100644 index 00000000000..6b2ab337f79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix006.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix006_PSO_OPT/mix006.c b/regression/goto-instrument-wmm-core/x86_mix006_PSO_OPT/mix006.c new file mode 100644 index 00000000000..e7b9adaed3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_PSO_OPT/mix006.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix006_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix006_PSO_OPT/test.desc new file mode 100644 index 00000000000..1166b561050 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix006.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix006_RMO_ALL/mix006.c b/regression/goto-instrument-wmm-core/x86_mix006_RMO_ALL/mix006.c new file mode 100644 index 00000000000..e7b9adaed3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_RMO_ALL/mix006.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix006_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix006_RMO_ALL/test.desc new file mode 100644 index 00000000000..0536b526423 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix006.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix006_RMO_OPC/mix006.c b/regression/goto-instrument-wmm-core/x86_mix006_RMO_OPC/mix006.c new file mode 100644 index 00000000000..e7b9adaed3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_RMO_OPC/mix006.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix006_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix006_RMO_OPC/test.desc new file mode 100644 index 00000000000..fd774a4971e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix006.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix006_RMO_OPT/mix006.c b/regression/goto-instrument-wmm-core/x86_mix006_RMO_OPT/mix006.c new file mode 100644 index 00000000000..e7b9adaed3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_RMO_OPT/mix006.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix006_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix006_RMO_OPT/test.desc new file mode 100644 index 00000000000..25781d29878 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix006.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix006_SC_SAFE/mix006.c b/regression/goto-instrument-wmm-core/x86_mix006_SC_SAFE/mix006.c new file mode 100644 index 00000000000..e7b9adaed3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_SC_SAFE/mix006.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix006_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix006_SC_SAFE/test.desc new file mode 100644 index 00000000000..832a4956eb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix006.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix006_TSO_ALL/mix006.c b/regression/goto-instrument-wmm-core/x86_mix006_TSO_ALL/mix006.c new file mode 100644 index 00000000000..e7b9adaed3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_TSO_ALL/mix006.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix006_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix006_TSO_ALL/test.desc new file mode 100644 index 00000000000..53cb854c928 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix006.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix006_TSO_OPC/mix006.c b/regression/goto-instrument-wmm-core/x86_mix006_TSO_OPC/mix006.c new file mode 100644 index 00000000000..e7b9adaed3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_TSO_OPC/mix006.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix006_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix006_TSO_OPC/test.desc new file mode 100644 index 00000000000..cf0f26a85b6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix006.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix006_TSO_OPT/mix006.c b/regression/goto-instrument-wmm-core/x86_mix006_TSO_OPT/mix006.c new file mode 100644 index 00000000000..e7b9adaed3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_TSO_OPT/mix006.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix006_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix006_TSO_OPT/test.desc new file mode 100644 index 00000000000..29a34b87758 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix006_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix006.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix007_CAV11_ERROR/mix007.c b/regression/goto-instrument-wmm-core/x86_mix007_CAV11_ERROR/mix007.c new file mode 100644 index 00000000000..8fa31e0be4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_CAV11_ERROR/mix007.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix007_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix007_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..32f64a531eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix007.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix007_POWER_ALL/mix007.c b/regression/goto-instrument-wmm-core/x86_mix007_POWER_ALL/mix007.c new file mode 100644 index 00000000000..8fa31e0be4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_POWER_ALL/mix007.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix007_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix007_POWER_ALL/test.desc new file mode 100644 index 00000000000..e16d6ceb573 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix007.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix007_POWER_OPC/mix007.c b/regression/goto-instrument-wmm-core/x86_mix007_POWER_OPC/mix007.c new file mode 100644 index 00000000000..8fa31e0be4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_POWER_OPC/mix007.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix007_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix007_POWER_OPC/test.desc new file mode 100644 index 00000000000..b436ef4e330 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix007.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix007_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix007_POWER_OPT/test.desc index efdba1cf5e6..d69365ce633 100644 --- a/regression/goto-instrument-wmm-core/x86_mix007_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix007_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix007.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix007_PSO_ALL/mix007.c b/regression/goto-instrument-wmm-core/x86_mix007_PSO_ALL/mix007.c new file mode 100644 index 00000000000..8fa31e0be4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_PSO_ALL/mix007.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix007_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix007_PSO_ALL/test.desc new file mode 100644 index 00000000000..579f0bd8753 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix007.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix007_PSO_OPC/mix007.c b/regression/goto-instrument-wmm-core/x86_mix007_PSO_OPC/mix007.c new file mode 100644 index 00000000000..8fa31e0be4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_PSO_OPC/mix007.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix007_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix007_PSO_OPC/test.desc new file mode 100644 index 00000000000..140c2f13a74 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix007.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix007_PSO_OPT/mix007.c b/regression/goto-instrument-wmm-core/x86_mix007_PSO_OPT/mix007.c new file mode 100644 index 00000000000..8fa31e0be4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_PSO_OPT/mix007.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix007_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix007_PSO_OPT/test.desc new file mode 100644 index 00000000000..3107902fc3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix007.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix007_RMO_ALL/mix007.c b/regression/goto-instrument-wmm-core/x86_mix007_RMO_ALL/mix007.c new file mode 100644 index 00000000000..8fa31e0be4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_RMO_ALL/mix007.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix007_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix007_RMO_ALL/test.desc new file mode 100644 index 00000000000..1dc4689a54f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix007.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix007_RMO_OPC/mix007.c b/regression/goto-instrument-wmm-core/x86_mix007_RMO_OPC/mix007.c new file mode 100644 index 00000000000..8fa31e0be4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_RMO_OPC/mix007.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix007_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix007_RMO_OPC/test.desc new file mode 100644 index 00000000000..6dfbbd7e7d5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix007.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix007_RMO_OPT/mix007.c b/regression/goto-instrument-wmm-core/x86_mix007_RMO_OPT/mix007.c new file mode 100644 index 00000000000..8fa31e0be4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_RMO_OPT/mix007.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix007_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix007_RMO_OPT/test.desc new file mode 100644 index 00000000000..c4b79e0da26 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix007.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix007_SC_SAFE/mix007.c b/regression/goto-instrument-wmm-core/x86_mix007_SC_SAFE/mix007.c new file mode 100644 index 00000000000..8fa31e0be4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_SC_SAFE/mix007.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix007_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix007_SC_SAFE/test.desc new file mode 100644 index 00000000000..17153a91ba6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix007.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix007_TSO_ALL/mix007.c b/regression/goto-instrument-wmm-core/x86_mix007_TSO_ALL/mix007.c new file mode 100644 index 00000000000..8fa31e0be4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_TSO_ALL/mix007.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix007_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix007_TSO_ALL/test.desc new file mode 100644 index 00000000000..cbf17154b6c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix007.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix007_TSO_OPC/mix007.c b/regression/goto-instrument-wmm-core/x86_mix007_TSO_OPC/mix007.c new file mode 100644 index 00000000000..8fa31e0be4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_TSO_OPC/mix007.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix007_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix007_TSO_OPC/test.desc new file mode 100644 index 00000000000..6fa30bafcb8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix007_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix007.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix007_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix007_TSO_OPT/test.desc index b7b528fdb3f..193e73bde81 100644 --- a/regression/goto-instrument-wmm-core/x86_mix007_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix007_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix007.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix008_CAV11_ERROR/mix008.c b/regression/goto-instrument-wmm-core/x86_mix008_CAV11_ERROR/mix008.c new file mode 100644 index 00000000000..0ffa48ea314 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_CAV11_ERROR/mix008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix008_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix008_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..c168ce8b07a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix008.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix008_POWER_ALL/mix008.c b/regression/goto-instrument-wmm-core/x86_mix008_POWER_ALL/mix008.c new file mode 100644 index 00000000000..0ffa48ea314 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_POWER_ALL/mix008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix008_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix008_POWER_ALL/test.desc new file mode 100644 index 00000000000..1ac258a90a2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix008.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix008_POWER_OPC/mix008.c b/regression/goto-instrument-wmm-core/x86_mix008_POWER_OPC/mix008.c new file mode 100644 index 00000000000..0ffa48ea314 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_POWER_OPC/mix008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix008_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix008_POWER_OPC/test.desc new file mode 100644 index 00000000000..858f87ae19f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix008.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix008_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix008_POWER_OPT/test.desc index 005e4b43223..ea8a4ca172d 100644 --- a/regression/goto-instrument-wmm-core/x86_mix008_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix008_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix008.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix008_PSO_ALL/mix008.c b/regression/goto-instrument-wmm-core/x86_mix008_PSO_ALL/mix008.c new file mode 100644 index 00000000000..0ffa48ea314 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_PSO_ALL/mix008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix008_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix008_PSO_ALL/test.desc new file mode 100644 index 00000000000..56910972bab --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix008.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix008_PSO_OPC/mix008.c b/regression/goto-instrument-wmm-core/x86_mix008_PSO_OPC/mix008.c new file mode 100644 index 00000000000..0ffa48ea314 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_PSO_OPC/mix008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix008_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix008_PSO_OPC/test.desc new file mode 100644 index 00000000000..dc23a5af274 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix008.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix008_PSO_OPT/mix008.c b/regression/goto-instrument-wmm-core/x86_mix008_PSO_OPT/mix008.c new file mode 100644 index 00000000000..0ffa48ea314 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_PSO_OPT/mix008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix008_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix008_PSO_OPT/test.desc new file mode 100644 index 00000000000..e802722e61e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix008.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix008_RMO_ALL/mix008.c b/regression/goto-instrument-wmm-core/x86_mix008_RMO_ALL/mix008.c new file mode 100644 index 00000000000..0ffa48ea314 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_RMO_ALL/mix008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix008_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix008_RMO_ALL/test.desc new file mode 100644 index 00000000000..cb8d961655e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix008.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix008_RMO_OPC/mix008.c b/regression/goto-instrument-wmm-core/x86_mix008_RMO_OPC/mix008.c new file mode 100644 index 00000000000..0ffa48ea314 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_RMO_OPC/mix008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix008_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix008_RMO_OPC/test.desc new file mode 100644 index 00000000000..6c09e83eae4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix008.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix008_RMO_OPT/mix008.c b/regression/goto-instrument-wmm-core/x86_mix008_RMO_OPT/mix008.c new file mode 100644 index 00000000000..0ffa48ea314 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_RMO_OPT/mix008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix008_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix008_RMO_OPT/test.desc new file mode 100644 index 00000000000..75246bd684a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix008.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix008_SC_SAFE/mix008.c b/regression/goto-instrument-wmm-core/x86_mix008_SC_SAFE/mix008.c new file mode 100644 index 00000000000..0ffa48ea314 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_SC_SAFE/mix008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix008_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix008_SC_SAFE/test.desc new file mode 100644 index 00000000000..5c09e467b84 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix008.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix008_TSO_ALL/mix008.c b/regression/goto-instrument-wmm-core/x86_mix008_TSO_ALL/mix008.c new file mode 100644 index 00000000000..0ffa48ea314 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_TSO_ALL/mix008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix008_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix008_TSO_ALL/test.desc new file mode 100644 index 00000000000..7b209ad0f36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix008.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix008_TSO_OPC/mix008.c b/regression/goto-instrument-wmm-core/x86_mix008_TSO_OPC/mix008.c new file mode 100644 index 00000000000..0ffa48ea314 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_TSO_OPC/mix008.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix008_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix008_TSO_OPC/test.desc new file mode 100644 index 00000000000..a671a16310e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix008_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix008.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix008_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix008_TSO_OPT/test.desc index 24baeefabf1..0c629fd0cf1 100644 --- a/regression/goto-instrument-wmm-core/x86_mix008_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix008_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix008.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix009_CAV11_ERROR/mix009.c b/regression/goto-instrument-wmm-core/x86_mix009_CAV11_ERROR/mix009.c new file mode 100644 index 00000000000..b56c92287d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_CAV11_ERROR/mix009.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix009_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix009_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..e26f1688598 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix009.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix009_POWER_ALL/mix009.c b/regression/goto-instrument-wmm-core/x86_mix009_POWER_ALL/mix009.c new file mode 100644 index 00000000000..b56c92287d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_POWER_ALL/mix009.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix009_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix009_POWER_ALL/test.desc new file mode 100644 index 00000000000..8101bec8082 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix009.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix009_POWER_OPC/mix009.c b/regression/goto-instrument-wmm-core/x86_mix009_POWER_OPC/mix009.c new file mode 100644 index 00000000000..b56c92287d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_POWER_OPC/mix009.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix009_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix009_POWER_OPC/test.desc new file mode 100644 index 00000000000..db40348a733 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix009.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix009_POWER_OPT/mix009.c b/regression/goto-instrument-wmm-core/x86_mix009_POWER_OPT/mix009.c new file mode 100644 index 00000000000..b56c92287d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_POWER_OPT/mix009.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix009_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix009_POWER_OPT/test.desc new file mode 100644 index 00000000000..49fcf514328 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix009.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix009_PSO_ALL/mix009.c b/regression/goto-instrument-wmm-core/x86_mix009_PSO_ALL/mix009.c new file mode 100644 index 00000000000..b56c92287d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_PSO_ALL/mix009.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix009_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix009_PSO_ALL/test.desc new file mode 100644 index 00000000000..1583f8d6ae7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix009.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix009_PSO_OPC/mix009.c b/regression/goto-instrument-wmm-core/x86_mix009_PSO_OPC/mix009.c new file mode 100644 index 00000000000..b56c92287d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_PSO_OPC/mix009.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix009_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix009_PSO_OPC/test.desc new file mode 100644 index 00000000000..e015af961da --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix009.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix009_PSO_OPT/mix009.c b/regression/goto-instrument-wmm-core/x86_mix009_PSO_OPT/mix009.c new file mode 100644 index 00000000000..b56c92287d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_PSO_OPT/mix009.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix009_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix009_PSO_OPT/test.desc new file mode 100644 index 00000000000..ce88bc2d0fb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix009.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix009_RMO_ALL/mix009.c b/regression/goto-instrument-wmm-core/x86_mix009_RMO_ALL/mix009.c new file mode 100644 index 00000000000..b56c92287d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_RMO_ALL/mix009.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix009_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix009_RMO_ALL/test.desc new file mode 100644 index 00000000000..13de835ede0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix009.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix009_RMO_OPC/mix009.c b/regression/goto-instrument-wmm-core/x86_mix009_RMO_OPC/mix009.c new file mode 100644 index 00000000000..b56c92287d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_RMO_OPC/mix009.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix009_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix009_RMO_OPC/test.desc new file mode 100644 index 00000000000..0e7b800dff2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix009.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix009_RMO_OPT/mix009.c b/regression/goto-instrument-wmm-core/x86_mix009_RMO_OPT/mix009.c new file mode 100644 index 00000000000..b56c92287d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_RMO_OPT/mix009.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix009_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix009_RMO_OPT/test.desc new file mode 100644 index 00000000000..d1b915f712f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix009.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix009_SC_SAFE/mix009.c b/regression/goto-instrument-wmm-core/x86_mix009_SC_SAFE/mix009.c new file mode 100644 index 00000000000..b56c92287d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_SC_SAFE/mix009.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix009_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix009_SC_SAFE/test.desc new file mode 100644 index 00000000000..17426c6d99e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix009.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix009_TSO_ALL/mix009.c b/regression/goto-instrument-wmm-core/x86_mix009_TSO_ALL/mix009.c new file mode 100644 index 00000000000..b56c92287d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_TSO_ALL/mix009.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix009_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix009_TSO_ALL/test.desc new file mode 100644 index 00000000000..ee2b0fc935d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix009.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix009_TSO_OPC/mix009.c b/regression/goto-instrument-wmm-core/x86_mix009_TSO_OPC/mix009.c new file mode 100644 index 00000000000..b56c92287d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_TSO_OPC/mix009.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix009_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix009_TSO_OPC/test.desc new file mode 100644 index 00000000000..3a2bb8dcb64 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix009.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix009_TSO_OPT/mix009.c b/regression/goto-instrument-wmm-core/x86_mix009_TSO_OPT/mix009.c new file mode 100644 index 00000000000..b56c92287d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_TSO_OPT/mix009.c @@ -0,0 +1,58 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix009_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix009_TSO_OPT/test.desc new file mode 100644 index 00000000000..43d9fa2bf65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix009_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix009.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix010_CAV11_ERROR/mix010.c b/regression/goto-instrument-wmm-core/x86_mix010_CAV11_ERROR/mix010.c new file mode 100644 index 00000000000..f05aefa8c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_CAV11_ERROR/mix010.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix010_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix010_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..9f6b79933fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix010.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix010_POWER_ALL/mix010.c b/regression/goto-instrument-wmm-core/x86_mix010_POWER_ALL/mix010.c new file mode 100644 index 00000000000..f05aefa8c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_POWER_ALL/mix010.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix010_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix010_POWER_ALL/test.desc new file mode 100644 index 00000000000..0e62f38ce55 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix010.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix010_POWER_OPC/mix010.c b/regression/goto-instrument-wmm-core/x86_mix010_POWER_OPC/mix010.c new file mode 100644 index 00000000000..f05aefa8c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_POWER_OPC/mix010.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix010_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix010_POWER_OPC/test.desc new file mode 100644 index 00000000000..a10f8ccc4c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix010.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix010_POWER_OPT/mix010.c b/regression/goto-instrument-wmm-core/x86_mix010_POWER_OPT/mix010.c new file mode 100644 index 00000000000..f05aefa8c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_POWER_OPT/mix010.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix010_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix010_POWER_OPT/test.desc new file mode 100644 index 00000000000..a700f9f02d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix010.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix010_PSO_ALL/mix010.c b/regression/goto-instrument-wmm-core/x86_mix010_PSO_ALL/mix010.c new file mode 100644 index 00000000000..f05aefa8c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_PSO_ALL/mix010.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix010_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix010_PSO_ALL/test.desc new file mode 100644 index 00000000000..c3036991aab --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix010.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix010_PSO_OPC/mix010.c b/regression/goto-instrument-wmm-core/x86_mix010_PSO_OPC/mix010.c new file mode 100644 index 00000000000..f05aefa8c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_PSO_OPC/mix010.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix010_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix010_PSO_OPC/test.desc new file mode 100644 index 00000000000..95f2d8304fe --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix010.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix010_PSO_OPT/mix010.c b/regression/goto-instrument-wmm-core/x86_mix010_PSO_OPT/mix010.c new file mode 100644 index 00000000000..f05aefa8c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_PSO_OPT/mix010.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix010_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix010_PSO_OPT/test.desc new file mode 100644 index 00000000000..28f14e45490 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix010.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix010_RMO_ALL/mix010.c b/regression/goto-instrument-wmm-core/x86_mix010_RMO_ALL/mix010.c new file mode 100644 index 00000000000..f05aefa8c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_RMO_ALL/mix010.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix010_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix010_RMO_ALL/test.desc new file mode 100644 index 00000000000..dc5f9c21616 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix010.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix010_RMO_OPC/mix010.c b/regression/goto-instrument-wmm-core/x86_mix010_RMO_OPC/mix010.c new file mode 100644 index 00000000000..f05aefa8c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_RMO_OPC/mix010.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix010_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix010_RMO_OPC/test.desc new file mode 100644 index 00000000000..6ae924da268 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix010.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix010_RMO_OPT/mix010.c b/regression/goto-instrument-wmm-core/x86_mix010_RMO_OPT/mix010.c new file mode 100644 index 00000000000..f05aefa8c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_RMO_OPT/mix010.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix010_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix010_RMO_OPT/test.desc new file mode 100644 index 00000000000..36fab497cbe --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix010.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix010_SC_SAFE/mix010.c b/regression/goto-instrument-wmm-core/x86_mix010_SC_SAFE/mix010.c new file mode 100644 index 00000000000..f05aefa8c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_SC_SAFE/mix010.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix010_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix010_SC_SAFE/test.desc new file mode 100644 index 00000000000..53c25476b43 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix010.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix010_TSO_ALL/mix010.c b/regression/goto-instrument-wmm-core/x86_mix010_TSO_ALL/mix010.c new file mode 100644 index 00000000000..f05aefa8c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_TSO_ALL/mix010.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix010_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix010_TSO_ALL/test.desc new file mode 100644 index 00000000000..4112b961577 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix010.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix010_TSO_OPC/mix010.c b/regression/goto-instrument-wmm-core/x86_mix010_TSO_OPC/mix010.c new file mode 100644 index 00000000000..f05aefa8c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_TSO_OPC/mix010.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix010_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix010_TSO_OPC/test.desc new file mode 100644 index 00000000000..eb33edd9c9c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix010.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix010_TSO_OPT/mix010.c b/regression/goto-instrument-wmm-core/x86_mix010_TSO_OPT/mix010.c new file mode 100644 index 00000000000..f05aefa8c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_TSO_OPT/mix010.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix010_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix010_TSO_OPT/test.desc new file mode 100644 index 00000000000..67000270d25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix010_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix010.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix011_CAV11_ERROR/mix011.c b/regression/goto-instrument-wmm-core/x86_mix011_CAV11_ERROR/mix011.c new file mode 100644 index 00000000000..ddec63275be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_CAV11_ERROR/mix011.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix011_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix011_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..786f5bdd0d7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix011.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix011_POWER_ALL/mix011.c b/regression/goto-instrument-wmm-core/x86_mix011_POWER_ALL/mix011.c new file mode 100644 index 00000000000..ddec63275be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_POWER_ALL/mix011.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix011_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix011_POWER_ALL/test.desc new file mode 100644 index 00000000000..b11dea60d6d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix011.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix011_POWER_OPC/mix011.c b/regression/goto-instrument-wmm-core/x86_mix011_POWER_OPC/mix011.c new file mode 100644 index 00000000000..ddec63275be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_POWER_OPC/mix011.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix011_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix011_POWER_OPC/test.desc new file mode 100644 index 00000000000..c51f4e87379 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix011.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix011_POWER_OPT/mix011.c b/regression/goto-instrument-wmm-core/x86_mix011_POWER_OPT/mix011.c new file mode 100644 index 00000000000..ddec63275be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_POWER_OPT/mix011.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix011_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix011_POWER_OPT/test.desc new file mode 100644 index 00000000000..1b30e44aa11 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix011.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix011_PSO_ALL/mix011.c b/regression/goto-instrument-wmm-core/x86_mix011_PSO_ALL/mix011.c new file mode 100644 index 00000000000..ddec63275be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_PSO_ALL/mix011.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix011_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix011_PSO_ALL/test.desc new file mode 100644 index 00000000000..c5d02c9d222 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix011.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix011_PSO_OPC/mix011.c b/regression/goto-instrument-wmm-core/x86_mix011_PSO_OPC/mix011.c new file mode 100644 index 00000000000..ddec63275be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_PSO_OPC/mix011.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix011_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix011_PSO_OPC/test.desc new file mode 100644 index 00000000000..bb76eaad3d7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix011.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix011_PSO_OPT/mix011.c b/regression/goto-instrument-wmm-core/x86_mix011_PSO_OPT/mix011.c new file mode 100644 index 00000000000..ddec63275be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_PSO_OPT/mix011.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix011_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix011_PSO_OPT/test.desc new file mode 100644 index 00000000000..c5cfdda9dbe --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix011.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix011_RMO_ALL/mix011.c b/regression/goto-instrument-wmm-core/x86_mix011_RMO_ALL/mix011.c new file mode 100644 index 00000000000..ddec63275be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_RMO_ALL/mix011.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix011_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix011_RMO_ALL/test.desc new file mode 100644 index 00000000000..f5d40e8da56 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix011.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix011_RMO_OPC/mix011.c b/regression/goto-instrument-wmm-core/x86_mix011_RMO_OPC/mix011.c new file mode 100644 index 00000000000..ddec63275be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_RMO_OPC/mix011.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix011_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix011_RMO_OPC/test.desc new file mode 100644 index 00000000000..eb410a4b6af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix011.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix011_RMO_OPT/mix011.c b/regression/goto-instrument-wmm-core/x86_mix011_RMO_OPT/mix011.c new file mode 100644 index 00000000000..ddec63275be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_RMO_OPT/mix011.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix011_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix011_RMO_OPT/test.desc new file mode 100644 index 00000000000..abd82c04c34 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix011.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix011_SC_SAFE/mix011.c b/regression/goto-instrument-wmm-core/x86_mix011_SC_SAFE/mix011.c new file mode 100644 index 00000000000..ddec63275be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_SC_SAFE/mix011.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix011_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix011_SC_SAFE/test.desc new file mode 100644 index 00000000000..6ff48be6db7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix011.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix011_TSO_ALL/mix011.c b/regression/goto-instrument-wmm-core/x86_mix011_TSO_ALL/mix011.c new file mode 100644 index 00000000000..ddec63275be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_TSO_ALL/mix011.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix011_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix011_TSO_ALL/test.desc new file mode 100644 index 00000000000..0f39f577b8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix011.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix011_TSO_OPC/mix011.c b/regression/goto-instrument-wmm-core/x86_mix011_TSO_OPC/mix011.c new file mode 100644 index 00000000000..ddec63275be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_TSO_OPC/mix011.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix011_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix011_TSO_OPC/test.desc new file mode 100644 index 00000000000..effd1609683 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix011.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix011_TSO_OPT/mix011.c b/regression/goto-instrument-wmm-core/x86_mix011_TSO_OPT/mix011.c new file mode 100644 index 00000000000..ddec63275be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_TSO_OPT/mix011.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix011_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix011_TSO_OPT/test.desc new file mode 100644 index 00000000000..3baf00c85ad --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix011_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix011.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix012_CAV11_ERROR/mix012.c b/regression/goto-instrument-wmm-core/x86_mix012_CAV11_ERROR/mix012.c new file mode 100644 index 00000000000..3b98c298d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_CAV11_ERROR/mix012.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix012_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix012_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..0b3387dd3b1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix012.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix012_POWER_ALL/mix012.c b/regression/goto-instrument-wmm-core/x86_mix012_POWER_ALL/mix012.c new file mode 100644 index 00000000000..3b98c298d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_POWER_ALL/mix012.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix012_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix012_POWER_ALL/test.desc new file mode 100644 index 00000000000..06f9c307481 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix012.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix012_POWER_OPC/mix012.c b/regression/goto-instrument-wmm-core/x86_mix012_POWER_OPC/mix012.c new file mode 100644 index 00000000000..3b98c298d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_POWER_OPC/mix012.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix012_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix012_POWER_OPC/test.desc new file mode 100644 index 00000000000..cd0d676fa26 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix012.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix012_POWER_OPT/mix012.c b/regression/goto-instrument-wmm-core/x86_mix012_POWER_OPT/mix012.c new file mode 100644 index 00000000000..3b98c298d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_POWER_OPT/mix012.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix012_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix012_POWER_OPT/test.desc new file mode 100644 index 00000000000..2505fa41e57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix012.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix012_PSO_ALL/mix012.c b/regression/goto-instrument-wmm-core/x86_mix012_PSO_ALL/mix012.c new file mode 100644 index 00000000000..3b98c298d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_PSO_ALL/mix012.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix012_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix012_PSO_ALL/test.desc new file mode 100644 index 00000000000..c8120e55b47 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix012.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix012_PSO_OPC/mix012.c b/regression/goto-instrument-wmm-core/x86_mix012_PSO_OPC/mix012.c new file mode 100644 index 00000000000..3b98c298d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_PSO_OPC/mix012.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix012_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix012_PSO_OPC/test.desc new file mode 100644 index 00000000000..3b49bef3466 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix012.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix012_PSO_OPT/mix012.c b/regression/goto-instrument-wmm-core/x86_mix012_PSO_OPT/mix012.c new file mode 100644 index 00000000000..3b98c298d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_PSO_OPT/mix012.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix012_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix012_PSO_OPT/test.desc new file mode 100644 index 00000000000..b7c9972044b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix012.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix012_RMO_ALL/mix012.c b/regression/goto-instrument-wmm-core/x86_mix012_RMO_ALL/mix012.c new file mode 100644 index 00000000000..3b98c298d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_RMO_ALL/mix012.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix012_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix012_RMO_ALL/test.desc new file mode 100644 index 00000000000..203aaf7225a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix012.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix012_RMO_OPC/mix012.c b/regression/goto-instrument-wmm-core/x86_mix012_RMO_OPC/mix012.c new file mode 100644 index 00000000000..3b98c298d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_RMO_OPC/mix012.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix012_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix012_RMO_OPC/test.desc new file mode 100644 index 00000000000..c5a189459c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix012.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix012_RMO_OPT/mix012.c b/regression/goto-instrument-wmm-core/x86_mix012_RMO_OPT/mix012.c new file mode 100644 index 00000000000..3b98c298d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_RMO_OPT/mix012.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix012_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix012_RMO_OPT/test.desc new file mode 100644 index 00000000000..4002cb6ddc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix012.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix012_SC_SAFE/mix012.c b/regression/goto-instrument-wmm-core/x86_mix012_SC_SAFE/mix012.c new file mode 100644 index 00000000000..3b98c298d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_SC_SAFE/mix012.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix012_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix012_SC_SAFE/test.desc new file mode 100644 index 00000000000..4d59a92baa8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix012.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix012_TSO_ALL/mix012.c b/regression/goto-instrument-wmm-core/x86_mix012_TSO_ALL/mix012.c new file mode 100644 index 00000000000..3b98c298d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_TSO_ALL/mix012.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix012_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix012_TSO_ALL/test.desc new file mode 100644 index 00000000000..d0d196924fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix012.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix012_TSO_OPC/mix012.c b/regression/goto-instrument-wmm-core/x86_mix012_TSO_OPC/mix012.c new file mode 100644 index 00000000000..3b98c298d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_TSO_OPC/mix012.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix012_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix012_TSO_OPC/test.desc new file mode 100644 index 00000000000..72845018e5f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix012.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix012_TSO_OPT/mix012.c b/regression/goto-instrument-wmm-core/x86_mix012_TSO_OPT/mix012.c new file mode 100644 index 00000000000..3b98c298d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_TSO_OPT/mix012.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix012_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix012_TSO_OPT/test.desc new file mode 100644 index 00000000000..ad0fdb18653 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix012_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix012.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix013_CAV11_ERROR/mix013.c b/regression/goto-instrument-wmm-core/x86_mix013_CAV11_ERROR/mix013.c new file mode 100644 index 00000000000..3d5e6c60eeb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_CAV11_ERROR/mix013.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix013_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix013_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..d07622595aa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix013.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix013_POWER_ALL/mix013.c b/regression/goto-instrument-wmm-core/x86_mix013_POWER_ALL/mix013.c new file mode 100644 index 00000000000..3d5e6c60eeb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_POWER_ALL/mix013.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix013_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix013_POWER_ALL/test.desc new file mode 100644 index 00000000000..4611e43714e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix013.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix013_POWER_OPC/mix013.c b/regression/goto-instrument-wmm-core/x86_mix013_POWER_OPC/mix013.c new file mode 100644 index 00000000000..3d5e6c60eeb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_POWER_OPC/mix013.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix013_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix013_POWER_OPC/test.desc new file mode 100644 index 00000000000..4bbda60f963 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix013.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix013_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix013_POWER_OPT/test.desc index b714fde0c09..c94a6f74dfb 100644 --- a/regression/goto-instrument-wmm-core/x86_mix013_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix013_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix013.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix013_PSO_ALL/mix013.c b/regression/goto-instrument-wmm-core/x86_mix013_PSO_ALL/mix013.c new file mode 100644 index 00000000000..3d5e6c60eeb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_PSO_ALL/mix013.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix013_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix013_PSO_ALL/test.desc new file mode 100644 index 00000000000..7c8f231f719 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix013.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix013_PSO_OPC/mix013.c b/regression/goto-instrument-wmm-core/x86_mix013_PSO_OPC/mix013.c new file mode 100644 index 00000000000..3d5e6c60eeb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_PSO_OPC/mix013.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix013_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix013_PSO_OPC/test.desc new file mode 100644 index 00000000000..25ae7a22aaa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix013.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix013_PSO_OPT/mix013.c b/regression/goto-instrument-wmm-core/x86_mix013_PSO_OPT/mix013.c new file mode 100644 index 00000000000..3d5e6c60eeb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_PSO_OPT/mix013.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix013_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix013_PSO_OPT/test.desc new file mode 100644 index 00000000000..e4055f2f25c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix013.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix013_RMO_ALL/mix013.c b/regression/goto-instrument-wmm-core/x86_mix013_RMO_ALL/mix013.c new file mode 100644 index 00000000000..3d5e6c60eeb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_RMO_ALL/mix013.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix013_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix013_RMO_ALL/test.desc new file mode 100644 index 00000000000..01108467901 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix013.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix013_RMO_OPC/mix013.c b/regression/goto-instrument-wmm-core/x86_mix013_RMO_OPC/mix013.c new file mode 100644 index 00000000000..3d5e6c60eeb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_RMO_OPC/mix013.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix013_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix013_RMO_OPC/test.desc new file mode 100644 index 00000000000..24ba74558bf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix013.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix013_RMO_OPT/mix013.c b/regression/goto-instrument-wmm-core/x86_mix013_RMO_OPT/mix013.c new file mode 100644 index 00000000000..3d5e6c60eeb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_RMO_OPT/mix013.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix013_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix013_RMO_OPT/test.desc new file mode 100644 index 00000000000..b5a466f8f9d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix013.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix013_SC_SAFE/mix013.c b/regression/goto-instrument-wmm-core/x86_mix013_SC_SAFE/mix013.c new file mode 100644 index 00000000000..3d5e6c60eeb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_SC_SAFE/mix013.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix013_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix013_SC_SAFE/test.desc new file mode 100644 index 00000000000..ae72e8a2a12 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix013.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix013_TSO_ALL/mix013.c b/regression/goto-instrument-wmm-core/x86_mix013_TSO_ALL/mix013.c new file mode 100644 index 00000000000..3d5e6c60eeb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_TSO_ALL/mix013.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix013_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix013_TSO_ALL/test.desc new file mode 100644 index 00000000000..0055f04bc79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix013.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix013_TSO_OPC/mix013.c b/regression/goto-instrument-wmm-core/x86_mix013_TSO_OPC/mix013.c new file mode 100644 index 00000000000..3d5e6c60eeb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_TSO_OPC/mix013.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix013_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix013_TSO_OPC/test.desc new file mode 100644 index 00000000000..61c3498d4b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix013_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix013.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix013_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix013_TSO_OPT/test.desc index 47e10eae714..7f588944482 100644 --- a/regression/goto-instrument-wmm-core/x86_mix013_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix013_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix013.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix014_CAV11_ERROR/mix014.c b/regression/goto-instrument-wmm-core/x86_mix014_CAV11_ERROR/mix014.c new file mode 100644 index 00000000000..dc7a6a63351 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_CAV11_ERROR/mix014.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix014_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix014_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..5244ae633c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix014.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix014_POWER_ALL/mix014.c b/regression/goto-instrument-wmm-core/x86_mix014_POWER_ALL/mix014.c new file mode 100644 index 00000000000..dc7a6a63351 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_POWER_ALL/mix014.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix014_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix014_POWER_ALL/test.desc new file mode 100644 index 00000000000..799b45b850c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix014.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix014_POWER_OPC/mix014.c b/regression/goto-instrument-wmm-core/x86_mix014_POWER_OPC/mix014.c new file mode 100644 index 00000000000..dc7a6a63351 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_POWER_OPC/mix014.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix014_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix014_POWER_OPC/test.desc new file mode 100644 index 00000000000..b929a03d8aa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix014.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix014_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix014_POWER_OPT/test.desc index a47ca08e1ee..9c8604a0e7f 100644 --- a/regression/goto-instrument-wmm-core/x86_mix014_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix014_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix014.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix014_PSO_ALL/mix014.c b/regression/goto-instrument-wmm-core/x86_mix014_PSO_ALL/mix014.c new file mode 100644 index 00000000000..dc7a6a63351 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_PSO_ALL/mix014.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix014_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix014_PSO_ALL/test.desc new file mode 100644 index 00000000000..b6e9f38ed51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix014.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix014_PSO_OPC/mix014.c b/regression/goto-instrument-wmm-core/x86_mix014_PSO_OPC/mix014.c new file mode 100644 index 00000000000..dc7a6a63351 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_PSO_OPC/mix014.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix014_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix014_PSO_OPC/test.desc new file mode 100644 index 00000000000..cdee38a31bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix014.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix014_PSO_OPT/mix014.c b/regression/goto-instrument-wmm-core/x86_mix014_PSO_OPT/mix014.c new file mode 100644 index 00000000000..dc7a6a63351 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_PSO_OPT/mix014.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix014_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix014_PSO_OPT/test.desc new file mode 100644 index 00000000000..b54f838e22c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix014.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix014_RMO_ALL/mix014.c b/regression/goto-instrument-wmm-core/x86_mix014_RMO_ALL/mix014.c new file mode 100644 index 00000000000..dc7a6a63351 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_RMO_ALL/mix014.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix014_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix014_RMO_ALL/test.desc new file mode 100644 index 00000000000..b664fd79f98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix014.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix014_RMO_OPC/mix014.c b/regression/goto-instrument-wmm-core/x86_mix014_RMO_OPC/mix014.c new file mode 100644 index 00000000000..dc7a6a63351 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_RMO_OPC/mix014.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix014_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix014_RMO_OPC/test.desc new file mode 100644 index 00000000000..d1c95a5baef --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix014.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix014_RMO_OPT/mix014.c b/regression/goto-instrument-wmm-core/x86_mix014_RMO_OPT/mix014.c new file mode 100644 index 00000000000..dc7a6a63351 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_RMO_OPT/mix014.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix014_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix014_RMO_OPT/test.desc new file mode 100644 index 00000000000..963799e7ac6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix014.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix014_SC_SAFE/mix014.c b/regression/goto-instrument-wmm-core/x86_mix014_SC_SAFE/mix014.c new file mode 100644 index 00000000000..dc7a6a63351 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_SC_SAFE/mix014.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix014_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix014_SC_SAFE/test.desc new file mode 100644 index 00000000000..4b10ed983b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix014.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix014_TSO_ALL/mix014.c b/regression/goto-instrument-wmm-core/x86_mix014_TSO_ALL/mix014.c new file mode 100644 index 00000000000..dc7a6a63351 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_TSO_ALL/mix014.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix014_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix014_TSO_ALL/test.desc new file mode 100644 index 00000000000..3b0462b414a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix014.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix014_TSO_OPC/mix014.c b/regression/goto-instrument-wmm-core/x86_mix014_TSO_OPC/mix014.c new file mode 100644 index 00000000000..dc7a6a63351 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_TSO_OPC/mix014.c @@ -0,0 +1,82 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix014_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix014_TSO_OPC/test.desc new file mode 100644 index 00000000000..6d9985adf3e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix014_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix014.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix014_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix014_TSO_OPT/test.desc index b478166f69d..ff3cfb1f040 100644 --- a/regression/goto-instrument-wmm-core/x86_mix014_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix014_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix014.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix015_CAV11_ERROR/mix015.c b/regression/goto-instrument-wmm-core/x86_mix015_CAV11_ERROR/mix015.c new file mode 100644 index 00000000000..42854a6325f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_CAV11_ERROR/mix015.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix015_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix015_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..a46c35dd2ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix015.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix015_POWER_ALL/mix015.c b/regression/goto-instrument-wmm-core/x86_mix015_POWER_ALL/mix015.c new file mode 100644 index 00000000000..42854a6325f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_POWER_ALL/mix015.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix015_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix015_POWER_ALL/test.desc new file mode 100644 index 00000000000..27c7eb08e67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix015.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix015_POWER_OPC/mix015.c b/regression/goto-instrument-wmm-core/x86_mix015_POWER_OPC/mix015.c new file mode 100644 index 00000000000..42854a6325f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_POWER_OPC/mix015.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix015_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix015_POWER_OPC/test.desc new file mode 100644 index 00000000000..8b56de574d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix015.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix015_POWER_OPT/mix015.c b/regression/goto-instrument-wmm-core/x86_mix015_POWER_OPT/mix015.c new file mode 100644 index 00000000000..42854a6325f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_POWER_OPT/mix015.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix015_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix015_POWER_OPT/test.desc new file mode 100644 index 00000000000..0b34da8f617 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix015.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix015_PSO_ALL/mix015.c b/regression/goto-instrument-wmm-core/x86_mix015_PSO_ALL/mix015.c new file mode 100644 index 00000000000..42854a6325f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_PSO_ALL/mix015.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix015_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix015_PSO_ALL/test.desc new file mode 100644 index 00000000000..a6fcad11b29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix015.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix015_PSO_OPC/mix015.c b/regression/goto-instrument-wmm-core/x86_mix015_PSO_OPC/mix015.c new file mode 100644 index 00000000000..42854a6325f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_PSO_OPC/mix015.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix015_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix015_PSO_OPC/test.desc new file mode 100644 index 00000000000..45d1f110f0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix015.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix015_PSO_OPT/mix015.c b/regression/goto-instrument-wmm-core/x86_mix015_PSO_OPT/mix015.c new file mode 100644 index 00000000000..42854a6325f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_PSO_OPT/mix015.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix015_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix015_PSO_OPT/test.desc new file mode 100644 index 00000000000..506d5e4d2bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix015.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix015_RMO_ALL/mix015.c b/regression/goto-instrument-wmm-core/x86_mix015_RMO_ALL/mix015.c new file mode 100644 index 00000000000..42854a6325f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_RMO_ALL/mix015.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix015_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix015_RMO_ALL/test.desc new file mode 100644 index 00000000000..006407a61f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix015.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix015_RMO_OPC/mix015.c b/regression/goto-instrument-wmm-core/x86_mix015_RMO_OPC/mix015.c new file mode 100644 index 00000000000..42854a6325f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_RMO_OPC/mix015.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix015_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix015_RMO_OPC/test.desc new file mode 100644 index 00000000000..631eccb7d40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix015.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix015_RMO_OPT/mix015.c b/regression/goto-instrument-wmm-core/x86_mix015_RMO_OPT/mix015.c new file mode 100644 index 00000000000..42854a6325f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_RMO_OPT/mix015.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix015_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix015_RMO_OPT/test.desc new file mode 100644 index 00000000000..daf3dda9f6d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix015.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix015_SC_SAFE/mix015.c b/regression/goto-instrument-wmm-core/x86_mix015_SC_SAFE/mix015.c new file mode 100644 index 00000000000..42854a6325f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_SC_SAFE/mix015.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix015_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix015_SC_SAFE/test.desc new file mode 100644 index 00000000000..f867d70b256 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix015.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix015_TSO_ALL/mix015.c b/regression/goto-instrument-wmm-core/x86_mix015_TSO_ALL/mix015.c new file mode 100644 index 00000000000..42854a6325f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_TSO_ALL/mix015.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix015_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix015_TSO_ALL/test.desc new file mode 100644 index 00000000000..0ec930dafa8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix015.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix015_TSO_OPC/mix015.c b/regression/goto-instrument-wmm-core/x86_mix015_TSO_OPC/mix015.c new file mode 100644 index 00000000000..42854a6325f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_TSO_OPC/mix015.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix015_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix015_TSO_OPC/test.desc new file mode 100644 index 00000000000..904a5af0426 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix015.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix015_TSO_OPT/mix015.c b/regression/goto-instrument-wmm-core/x86_mix015_TSO_OPT/mix015.c new file mode 100644 index 00000000000..42854a6325f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_TSO_OPT/mix015.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix015_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix015_TSO_OPT/test.desc new file mode 100644 index 00000000000..aeb62bbed4a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix015_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix015.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix016_CAV11_ERROR/mix016.c b/regression/goto-instrument-wmm-core/x86_mix016_CAV11_ERROR/mix016.c new file mode 100644 index 00000000000..2191f7a1607 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_CAV11_ERROR/mix016.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix016_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix016_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..0f9034cd1f9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix016.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix016_POWER_ALL/mix016.c b/regression/goto-instrument-wmm-core/x86_mix016_POWER_ALL/mix016.c new file mode 100644 index 00000000000..2191f7a1607 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_POWER_ALL/mix016.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix016_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix016_POWER_ALL/test.desc new file mode 100644 index 00000000000..8f4b9bd9ca1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix016.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix016_POWER_OPC/mix016.c b/regression/goto-instrument-wmm-core/x86_mix016_POWER_OPC/mix016.c new file mode 100644 index 00000000000..2191f7a1607 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_POWER_OPC/mix016.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix016_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix016_POWER_OPC/test.desc new file mode 100644 index 00000000000..b2243f4d3cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix016.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix016_POWER_OPT/mix016.c b/regression/goto-instrument-wmm-core/x86_mix016_POWER_OPT/mix016.c new file mode 100644 index 00000000000..2191f7a1607 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_POWER_OPT/mix016.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix016_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix016_POWER_OPT/test.desc new file mode 100644 index 00000000000..792a5afc65f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix016.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix016_PSO_ALL/mix016.c b/regression/goto-instrument-wmm-core/x86_mix016_PSO_ALL/mix016.c new file mode 100644 index 00000000000..2191f7a1607 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_PSO_ALL/mix016.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix016_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix016_PSO_ALL/test.desc new file mode 100644 index 00000000000..694cf62248d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix016.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix016_PSO_OPC/mix016.c b/regression/goto-instrument-wmm-core/x86_mix016_PSO_OPC/mix016.c new file mode 100644 index 00000000000..2191f7a1607 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_PSO_OPC/mix016.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix016_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix016_PSO_OPC/test.desc new file mode 100644 index 00000000000..883f13efdc7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix016.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix016_PSO_OPT/mix016.c b/regression/goto-instrument-wmm-core/x86_mix016_PSO_OPT/mix016.c new file mode 100644 index 00000000000..2191f7a1607 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_PSO_OPT/mix016.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix016_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix016_PSO_OPT/test.desc new file mode 100644 index 00000000000..44002f48881 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix016.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix016_RMO_ALL/mix016.c b/regression/goto-instrument-wmm-core/x86_mix016_RMO_ALL/mix016.c new file mode 100644 index 00000000000..2191f7a1607 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_RMO_ALL/mix016.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix016_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix016_RMO_ALL/test.desc new file mode 100644 index 00000000000..25423789f3b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix016.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix016_RMO_OPC/mix016.c b/regression/goto-instrument-wmm-core/x86_mix016_RMO_OPC/mix016.c new file mode 100644 index 00000000000..2191f7a1607 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_RMO_OPC/mix016.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix016_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix016_RMO_OPC/test.desc new file mode 100644 index 00000000000..5ea2ea9e586 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix016.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix016_RMO_OPT/mix016.c b/regression/goto-instrument-wmm-core/x86_mix016_RMO_OPT/mix016.c new file mode 100644 index 00000000000..2191f7a1607 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_RMO_OPT/mix016.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix016_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix016_RMO_OPT/test.desc new file mode 100644 index 00000000000..839b4764155 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix016.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix016_SC_SAFE/mix016.c b/regression/goto-instrument-wmm-core/x86_mix016_SC_SAFE/mix016.c new file mode 100644 index 00000000000..2191f7a1607 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_SC_SAFE/mix016.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix016_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix016_SC_SAFE/test.desc new file mode 100644 index 00000000000..4e3a5f68893 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix016.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix016_TSO_ALL/mix016.c b/regression/goto-instrument-wmm-core/x86_mix016_TSO_ALL/mix016.c new file mode 100644 index 00000000000..2191f7a1607 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_TSO_ALL/mix016.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix016_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix016_TSO_ALL/test.desc new file mode 100644 index 00000000000..33657d53e5a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix016.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix016_TSO_OPC/mix016.c b/regression/goto-instrument-wmm-core/x86_mix016_TSO_OPC/mix016.c new file mode 100644 index 00000000000..2191f7a1607 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_TSO_OPC/mix016.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix016_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix016_TSO_OPC/test.desc new file mode 100644 index 00000000000..6dc389d57ac --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix016.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix016_TSO_OPT/mix016.c b/regression/goto-instrument-wmm-core/x86_mix016_TSO_OPT/mix016.c new file mode 100644 index 00000000000..2191f7a1607 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_TSO_OPT/mix016.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix016_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix016_TSO_OPT/test.desc new file mode 100644 index 00000000000..29474e7e7ca --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix016_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix016.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix017_CAV11_ERROR/mix017.c b/regression/goto-instrument-wmm-core/x86_mix017_CAV11_ERROR/mix017.c new file mode 100644 index 00000000000..58f8ff1c9d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_CAV11_ERROR/mix017.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix017_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix017_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..e5e391d8edd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix017.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix017_POWER_ALL/mix017.c b/regression/goto-instrument-wmm-core/x86_mix017_POWER_ALL/mix017.c new file mode 100644 index 00000000000..58f8ff1c9d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_POWER_ALL/mix017.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix017_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix017_POWER_ALL/test.desc new file mode 100644 index 00000000000..45b066adadb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix017.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix017_POWER_OPC/mix017.c b/regression/goto-instrument-wmm-core/x86_mix017_POWER_OPC/mix017.c new file mode 100644 index 00000000000..58f8ff1c9d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_POWER_OPC/mix017.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix017_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix017_POWER_OPC/test.desc new file mode 100644 index 00000000000..3853d2621fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix017.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix017_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix017_POWER_OPT/test.desc index 28f98f16140..bd61a5c9546 100644 --- a/regression/goto-instrument-wmm-core/x86_mix017_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix017_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix017.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix017_PSO_ALL/mix017.c b/regression/goto-instrument-wmm-core/x86_mix017_PSO_ALL/mix017.c new file mode 100644 index 00000000000..58f8ff1c9d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_PSO_ALL/mix017.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix017_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix017_PSO_ALL/test.desc new file mode 100644 index 00000000000..d5ec5eb5c3d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix017.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix017_PSO_OPC/mix017.c b/regression/goto-instrument-wmm-core/x86_mix017_PSO_OPC/mix017.c new file mode 100644 index 00000000000..58f8ff1c9d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_PSO_OPC/mix017.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix017_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix017_PSO_OPC/test.desc new file mode 100644 index 00000000000..98c3100fd61 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix017.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix017_PSO_OPT/mix017.c b/regression/goto-instrument-wmm-core/x86_mix017_PSO_OPT/mix017.c new file mode 100644 index 00000000000..58f8ff1c9d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_PSO_OPT/mix017.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix017_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix017_PSO_OPT/test.desc new file mode 100644 index 00000000000..776a236ff1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix017.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix017_RMO_ALL/mix017.c b/regression/goto-instrument-wmm-core/x86_mix017_RMO_ALL/mix017.c new file mode 100644 index 00000000000..58f8ff1c9d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_RMO_ALL/mix017.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix017_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix017_RMO_ALL/test.desc new file mode 100644 index 00000000000..4d421d2dafa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix017.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix017_RMO_OPC/mix017.c b/regression/goto-instrument-wmm-core/x86_mix017_RMO_OPC/mix017.c new file mode 100644 index 00000000000..58f8ff1c9d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_RMO_OPC/mix017.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix017_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix017_RMO_OPC/test.desc new file mode 100644 index 00000000000..e85936c08d3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix017.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix017_RMO_OPT/mix017.c b/regression/goto-instrument-wmm-core/x86_mix017_RMO_OPT/mix017.c new file mode 100644 index 00000000000..58f8ff1c9d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_RMO_OPT/mix017.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix017_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix017_RMO_OPT/test.desc new file mode 100644 index 00000000000..3183309f17d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix017.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix017_SC_SAFE/mix017.c b/regression/goto-instrument-wmm-core/x86_mix017_SC_SAFE/mix017.c new file mode 100644 index 00000000000..58f8ff1c9d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_SC_SAFE/mix017.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix017_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix017_SC_SAFE/test.desc new file mode 100644 index 00000000000..fb30fc795be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix017.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix017_TSO_ALL/mix017.c b/regression/goto-instrument-wmm-core/x86_mix017_TSO_ALL/mix017.c new file mode 100644 index 00000000000..58f8ff1c9d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_TSO_ALL/mix017.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix017_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix017_TSO_ALL/test.desc new file mode 100644 index 00000000000..0c5f5d35e25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix017.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix017_TSO_OPC/mix017.c b/regression/goto-instrument-wmm-core/x86_mix017_TSO_OPC/mix017.c new file mode 100644 index 00000000000..58f8ff1c9d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_TSO_OPC/mix017.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix017_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix017_TSO_OPC/test.desc new file mode 100644 index 00000000000..39d94e6ae16 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix017_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix017.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix017_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix017_TSO_OPT/test.desc index 75ed13da5aa..fd0aa4f9c32 100644 --- a/regression/goto-instrument-wmm-core/x86_mix017_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix017_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix017.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix018_CAV11_ERROR/mix018.c b/regression/goto-instrument-wmm-core/x86_mix018_CAV11_ERROR/mix018.c new file mode 100644 index 00000000000..010eab01148 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_CAV11_ERROR/mix018.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix018_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix018_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..85c56900420 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix018.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix018_POWER_ALL/mix018.c b/regression/goto-instrument-wmm-core/x86_mix018_POWER_ALL/mix018.c new file mode 100644 index 00000000000..010eab01148 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_POWER_ALL/mix018.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix018_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix018_POWER_ALL/test.desc new file mode 100644 index 00000000000..21d5a93a026 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix018.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix018_POWER_OPC/mix018.c b/regression/goto-instrument-wmm-core/x86_mix018_POWER_OPC/mix018.c new file mode 100644 index 00000000000..010eab01148 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_POWER_OPC/mix018.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix018_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix018_POWER_OPC/test.desc new file mode 100644 index 00000000000..c8ebefc4163 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix018.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix018_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix018_POWER_OPT/test.desc index d0a7110a62a..b93afd2c109 100644 --- a/regression/goto-instrument-wmm-core/x86_mix018_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix018_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix018.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix018_PSO_ALL/mix018.c b/regression/goto-instrument-wmm-core/x86_mix018_PSO_ALL/mix018.c new file mode 100644 index 00000000000..010eab01148 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_PSO_ALL/mix018.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix018_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix018_PSO_ALL/test.desc new file mode 100644 index 00000000000..f4bf0498218 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix018.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix018_PSO_OPC/mix018.c b/regression/goto-instrument-wmm-core/x86_mix018_PSO_OPC/mix018.c new file mode 100644 index 00000000000..010eab01148 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_PSO_OPC/mix018.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix018_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix018_PSO_OPC/test.desc new file mode 100644 index 00000000000..f783c8147c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix018.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix018_PSO_OPT/mix018.c b/regression/goto-instrument-wmm-core/x86_mix018_PSO_OPT/mix018.c new file mode 100644 index 00000000000..010eab01148 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_PSO_OPT/mix018.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix018_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix018_PSO_OPT/test.desc new file mode 100644 index 00000000000..a95e943eb2d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix018.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix018_RMO_ALL/mix018.c b/regression/goto-instrument-wmm-core/x86_mix018_RMO_ALL/mix018.c new file mode 100644 index 00000000000..010eab01148 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_RMO_ALL/mix018.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix018_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix018_RMO_ALL/test.desc new file mode 100644 index 00000000000..e0dcea6352a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix018.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix018_RMO_OPC/mix018.c b/regression/goto-instrument-wmm-core/x86_mix018_RMO_OPC/mix018.c new file mode 100644 index 00000000000..010eab01148 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_RMO_OPC/mix018.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix018_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix018_RMO_OPC/test.desc new file mode 100644 index 00000000000..a95a946e87f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix018.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix018_RMO_OPT/mix018.c b/regression/goto-instrument-wmm-core/x86_mix018_RMO_OPT/mix018.c new file mode 100644 index 00000000000..010eab01148 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_RMO_OPT/mix018.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix018_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix018_RMO_OPT/test.desc new file mode 100644 index 00000000000..875e8ad211d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix018.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix018_SC_SAFE/mix018.c b/regression/goto-instrument-wmm-core/x86_mix018_SC_SAFE/mix018.c new file mode 100644 index 00000000000..010eab01148 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_SC_SAFE/mix018.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix018_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix018_SC_SAFE/test.desc new file mode 100644 index 00000000000..9ec4d0b1830 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix018.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix018_TSO_ALL/mix018.c b/regression/goto-instrument-wmm-core/x86_mix018_TSO_ALL/mix018.c new file mode 100644 index 00000000000..010eab01148 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_TSO_ALL/mix018.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix018_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix018_TSO_ALL/test.desc new file mode 100644 index 00000000000..ee961db3da2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix018.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix018_TSO_OPC/mix018.c b/regression/goto-instrument-wmm-core/x86_mix018_TSO_OPC/mix018.c new file mode 100644 index 00000000000..010eab01148 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_TSO_OPC/mix018.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix018_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix018_TSO_OPC/test.desc new file mode 100644 index 00000000000..3f0be7a3773 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix018_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix018.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix018_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix018_TSO_OPT/test.desc index 607a308ae98..d623b9b36dc 100644 --- a/regression/goto-instrument-wmm-core/x86_mix018_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix018_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix018.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix019_CAV11_ERROR/mix019.c b/regression/goto-instrument-wmm-core/x86_mix019_CAV11_ERROR/mix019.c new file mode 100644 index 00000000000..4dcd12b50b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_CAV11_ERROR/mix019.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix019_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix019_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..e7136e3e6a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix019.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix019_POWER_ALL/mix019.c b/regression/goto-instrument-wmm-core/x86_mix019_POWER_ALL/mix019.c new file mode 100644 index 00000000000..4dcd12b50b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_POWER_ALL/mix019.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix019_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix019_POWER_ALL/test.desc new file mode 100644 index 00000000000..47d21e9e6f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix019.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix019_POWER_OPC/mix019.c b/regression/goto-instrument-wmm-core/x86_mix019_POWER_OPC/mix019.c new file mode 100644 index 00000000000..4dcd12b50b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_POWER_OPC/mix019.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix019_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix019_POWER_OPC/test.desc new file mode 100644 index 00000000000..d47a17200ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix019.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix019_POWER_OPT/mix019.c b/regression/goto-instrument-wmm-core/x86_mix019_POWER_OPT/mix019.c new file mode 100644 index 00000000000..4dcd12b50b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_POWER_OPT/mix019.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix019_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix019_POWER_OPT/test.desc new file mode 100644 index 00000000000..eba2e71baed --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix019.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix019_PSO_ALL/mix019.c b/regression/goto-instrument-wmm-core/x86_mix019_PSO_ALL/mix019.c new file mode 100644 index 00000000000..4dcd12b50b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_PSO_ALL/mix019.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix019_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix019_PSO_ALL/test.desc new file mode 100644 index 00000000000..042526b3d1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix019.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix019_PSO_OPC/mix019.c b/regression/goto-instrument-wmm-core/x86_mix019_PSO_OPC/mix019.c new file mode 100644 index 00000000000..4dcd12b50b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_PSO_OPC/mix019.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix019_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix019_PSO_OPC/test.desc new file mode 100644 index 00000000000..26e0e162e31 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix019.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix019_PSO_OPT/mix019.c b/regression/goto-instrument-wmm-core/x86_mix019_PSO_OPT/mix019.c new file mode 100644 index 00000000000..4dcd12b50b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_PSO_OPT/mix019.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix019_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix019_PSO_OPT/test.desc new file mode 100644 index 00000000000..3604bab6baa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix019.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix019_RMO_ALL/mix019.c b/regression/goto-instrument-wmm-core/x86_mix019_RMO_ALL/mix019.c new file mode 100644 index 00000000000..4dcd12b50b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_RMO_ALL/mix019.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix019_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix019_RMO_ALL/test.desc new file mode 100644 index 00000000000..abfb59746d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix019.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix019_RMO_OPC/mix019.c b/regression/goto-instrument-wmm-core/x86_mix019_RMO_OPC/mix019.c new file mode 100644 index 00000000000..4dcd12b50b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_RMO_OPC/mix019.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix019_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix019_RMO_OPC/test.desc new file mode 100644 index 00000000000..436da721d2f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix019.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix019_RMO_OPT/mix019.c b/regression/goto-instrument-wmm-core/x86_mix019_RMO_OPT/mix019.c new file mode 100644 index 00000000000..4dcd12b50b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_RMO_OPT/mix019.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix019_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix019_RMO_OPT/test.desc new file mode 100644 index 00000000000..92565ac5379 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix019.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix019_SC_SAFE/mix019.c b/regression/goto-instrument-wmm-core/x86_mix019_SC_SAFE/mix019.c new file mode 100644 index 00000000000..4dcd12b50b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_SC_SAFE/mix019.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix019_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix019_SC_SAFE/test.desc new file mode 100644 index 00000000000..2cdb7c3fd98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix019.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix019_TSO_ALL/mix019.c b/regression/goto-instrument-wmm-core/x86_mix019_TSO_ALL/mix019.c new file mode 100644 index 00000000000..4dcd12b50b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_TSO_ALL/mix019.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix019_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix019_TSO_ALL/test.desc new file mode 100644 index 00000000000..59c8159eaaa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix019.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix019_TSO_OPC/mix019.c b/regression/goto-instrument-wmm-core/x86_mix019_TSO_OPC/mix019.c new file mode 100644 index 00000000000..4dcd12b50b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_TSO_OPC/mix019.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix019_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix019_TSO_OPC/test.desc new file mode 100644 index 00000000000..a0cfb7f5e3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix019.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix019_TSO_OPT/mix019.c b/regression/goto-instrument-wmm-core/x86_mix019_TSO_OPT/mix019.c new file mode 100644 index 00000000000..4dcd12b50b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_TSO_OPT/mix019.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix019_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix019_TSO_OPT/test.desc new file mode 100644 index 00000000000..65e02bbba5a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix019_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix019.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix020_CAV11_ERROR/mix020.c b/regression/goto-instrument-wmm-core/x86_mix020_CAV11_ERROR/mix020.c new file mode 100644 index 00000000000..c0dbe4a29a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_CAV11_ERROR/mix020.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix020_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix020_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..e17ff4aa738 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix020.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix020_POWER_ALL/mix020.c b/regression/goto-instrument-wmm-core/x86_mix020_POWER_ALL/mix020.c new file mode 100644 index 00000000000..c0dbe4a29a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_POWER_ALL/mix020.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix020_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix020_POWER_ALL/test.desc new file mode 100644 index 00000000000..b75524a9c28 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix020.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix020_POWER_OPC/mix020.c b/regression/goto-instrument-wmm-core/x86_mix020_POWER_OPC/mix020.c new file mode 100644 index 00000000000..c0dbe4a29a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_POWER_OPC/mix020.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix020_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix020_POWER_OPC/test.desc new file mode 100644 index 00000000000..504470a0e2f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix020.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix020_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix020_POWER_OPT/test.desc index 8f223444053..31a8d9eb9fe 100644 --- a/regression/goto-instrument-wmm-core/x86_mix020_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix020_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix020.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix020_PSO_ALL/mix020.c b/regression/goto-instrument-wmm-core/x86_mix020_PSO_ALL/mix020.c new file mode 100644 index 00000000000..c0dbe4a29a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_PSO_ALL/mix020.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix020_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix020_PSO_ALL/test.desc new file mode 100644 index 00000000000..06c5244eb19 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix020.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix020_PSO_OPC/mix020.c b/regression/goto-instrument-wmm-core/x86_mix020_PSO_OPC/mix020.c new file mode 100644 index 00000000000..c0dbe4a29a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_PSO_OPC/mix020.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix020_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix020_PSO_OPC/test.desc new file mode 100644 index 00000000000..4c4977fe711 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix020.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix020_PSO_OPT/mix020.c b/regression/goto-instrument-wmm-core/x86_mix020_PSO_OPT/mix020.c new file mode 100644 index 00000000000..c0dbe4a29a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_PSO_OPT/mix020.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix020_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix020_PSO_OPT/test.desc new file mode 100644 index 00000000000..689eb2050a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix020.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix020_RMO_ALL/mix020.c b/regression/goto-instrument-wmm-core/x86_mix020_RMO_ALL/mix020.c new file mode 100644 index 00000000000..c0dbe4a29a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_RMO_ALL/mix020.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix020_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix020_RMO_ALL/test.desc new file mode 100644 index 00000000000..1f66613c287 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix020.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix020_RMO_OPC/mix020.c b/regression/goto-instrument-wmm-core/x86_mix020_RMO_OPC/mix020.c new file mode 100644 index 00000000000..c0dbe4a29a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_RMO_OPC/mix020.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix020_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix020_RMO_OPC/test.desc new file mode 100644 index 00000000000..1168b2c41fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix020.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix020_RMO_OPT/mix020.c b/regression/goto-instrument-wmm-core/x86_mix020_RMO_OPT/mix020.c new file mode 100644 index 00000000000..c0dbe4a29a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_RMO_OPT/mix020.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix020_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix020_RMO_OPT/test.desc new file mode 100644 index 00000000000..dd1309d6906 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix020.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix020_SC_SAFE/mix020.c b/regression/goto-instrument-wmm-core/x86_mix020_SC_SAFE/mix020.c new file mode 100644 index 00000000000..c0dbe4a29a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_SC_SAFE/mix020.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix020_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix020_SC_SAFE/test.desc new file mode 100644 index 00000000000..aa174613cf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix020.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix020_TSO_ALL/mix020.c b/regression/goto-instrument-wmm-core/x86_mix020_TSO_ALL/mix020.c new file mode 100644 index 00000000000..c0dbe4a29a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_TSO_ALL/mix020.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix020_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix020_TSO_ALL/test.desc new file mode 100644 index 00000000000..ea2c623ad14 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix020.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix020_TSO_OPC/mix020.c b/regression/goto-instrument-wmm-core/x86_mix020_TSO_OPC/mix020.c new file mode 100644 index 00000000000..c0dbe4a29a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_TSO_OPC/mix020.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix020_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix020_TSO_OPC/test.desc new file mode 100644 index 00000000000..c2980f85cf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix020_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix020.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix020_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix020_TSO_OPT/test.desc index 2292be1692e..6074de3d5bf 100644 --- a/regression/goto-instrument-wmm-core/x86_mix020_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix020_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix020.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix021_CAV11_ERROR/mix021.c b/regression/goto-instrument-wmm-core/x86_mix021_CAV11_ERROR/mix021.c new file mode 100644 index 00000000000..7fca3113ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_CAV11_ERROR/mix021.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix021_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix021_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..b1da32c9903 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix021.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix021_POWER_ALL/mix021.c b/regression/goto-instrument-wmm-core/x86_mix021_POWER_ALL/mix021.c new file mode 100644 index 00000000000..7fca3113ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_POWER_ALL/mix021.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix021_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix021_POWER_ALL/test.desc new file mode 100644 index 00000000000..2bff51ccae6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix021.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix021_POWER_OPC/mix021.c b/regression/goto-instrument-wmm-core/x86_mix021_POWER_OPC/mix021.c new file mode 100644 index 00000000000..7fca3113ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_POWER_OPC/mix021.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix021_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix021_POWER_OPC/test.desc new file mode 100644 index 00000000000..ba020b0fb85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix021.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix021_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix021_POWER_OPT/test.desc index bc9e87c3607..7516f8a755a 100644 --- a/regression/goto-instrument-wmm-core/x86_mix021_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix021_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix021.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix021_PSO_ALL/mix021.c b/regression/goto-instrument-wmm-core/x86_mix021_PSO_ALL/mix021.c new file mode 100644 index 00000000000..7fca3113ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_PSO_ALL/mix021.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix021_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix021_PSO_ALL/test.desc new file mode 100644 index 00000000000..39ee42576d5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix021.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix021_PSO_OPC/mix021.c b/regression/goto-instrument-wmm-core/x86_mix021_PSO_OPC/mix021.c new file mode 100644 index 00000000000..7fca3113ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_PSO_OPC/mix021.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix021_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix021_PSO_OPC/test.desc new file mode 100644 index 00000000000..1a52fb42d56 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix021.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix021_PSO_OPT/mix021.c b/regression/goto-instrument-wmm-core/x86_mix021_PSO_OPT/mix021.c new file mode 100644 index 00000000000..7fca3113ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_PSO_OPT/mix021.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix021_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix021_PSO_OPT/test.desc new file mode 100644 index 00000000000..15a95bd8e9c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix021.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix021_RMO_ALL/mix021.c b/regression/goto-instrument-wmm-core/x86_mix021_RMO_ALL/mix021.c new file mode 100644 index 00000000000..7fca3113ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_RMO_ALL/mix021.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix021_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix021_RMO_ALL/test.desc new file mode 100644 index 00000000000..0cc121e5f04 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix021.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix021_RMO_OPC/mix021.c b/regression/goto-instrument-wmm-core/x86_mix021_RMO_OPC/mix021.c new file mode 100644 index 00000000000..7fca3113ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_RMO_OPC/mix021.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix021_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix021_RMO_OPC/test.desc new file mode 100644 index 00000000000..f4425140266 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix021.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix021_RMO_OPT/mix021.c b/regression/goto-instrument-wmm-core/x86_mix021_RMO_OPT/mix021.c new file mode 100644 index 00000000000..7fca3113ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_RMO_OPT/mix021.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix021_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix021_RMO_OPT/test.desc new file mode 100644 index 00000000000..8e6a18f9f26 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix021.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix021_SC_SAFE/mix021.c b/regression/goto-instrument-wmm-core/x86_mix021_SC_SAFE/mix021.c new file mode 100644 index 00000000000..7fca3113ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_SC_SAFE/mix021.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix021_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix021_SC_SAFE/test.desc new file mode 100644 index 00000000000..9635973d666 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix021.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix021_TSO_ALL/mix021.c b/regression/goto-instrument-wmm-core/x86_mix021_TSO_ALL/mix021.c new file mode 100644 index 00000000000..7fca3113ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_TSO_ALL/mix021.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix021_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix021_TSO_ALL/test.desc new file mode 100644 index 00000000000..f6fcbfddb36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix021.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix021_TSO_OPC/mix021.c b/regression/goto-instrument-wmm-core/x86_mix021_TSO_OPC/mix021.c new file mode 100644 index 00000000000..7fca3113ac3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_TSO_OPC/mix021.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix021_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix021_TSO_OPC/test.desc new file mode 100644 index 00000000000..27d46b9c293 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix021_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix021.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix021_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix021_TSO_OPT/test.desc index acc366dc05c..a2407ad2076 100644 --- a/regression/goto-instrument-wmm-core/x86_mix021_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix021_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix021.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix022_CAV11_ERROR/mix022.c b/regression/goto-instrument-wmm-core/x86_mix022_CAV11_ERROR/mix022.c new file mode 100644 index 00000000000..da32aead480 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_CAV11_ERROR/mix022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix022_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix022_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..125a7d82396 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix022.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix022_POWER_ALL/mix022.c b/regression/goto-instrument-wmm-core/x86_mix022_POWER_ALL/mix022.c new file mode 100644 index 00000000000..da32aead480 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_POWER_ALL/mix022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix022_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix022_POWER_ALL/test.desc new file mode 100644 index 00000000000..635f267768b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix022.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix022_POWER_OPC/mix022.c b/regression/goto-instrument-wmm-core/x86_mix022_POWER_OPC/mix022.c new file mode 100644 index 00000000000..da32aead480 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_POWER_OPC/mix022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix022_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix022_POWER_OPC/test.desc new file mode 100644 index 00000000000..e52d07c70f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix022.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix022_POWER_OPT/mix022.c b/regression/goto-instrument-wmm-core/x86_mix022_POWER_OPT/mix022.c new file mode 100644 index 00000000000..da32aead480 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_POWER_OPT/mix022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix022_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix022_POWER_OPT/test.desc new file mode 100644 index 00000000000..e5a43429805 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix022.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix022_PSO_ALL/mix022.c b/regression/goto-instrument-wmm-core/x86_mix022_PSO_ALL/mix022.c new file mode 100644 index 00000000000..da32aead480 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_PSO_ALL/mix022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix022_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix022_PSO_ALL/test.desc new file mode 100644 index 00000000000..af904293c32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix022.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix022_PSO_OPC/mix022.c b/regression/goto-instrument-wmm-core/x86_mix022_PSO_OPC/mix022.c new file mode 100644 index 00000000000..da32aead480 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_PSO_OPC/mix022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix022_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix022_PSO_OPC/test.desc new file mode 100644 index 00000000000..890fc9110d5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix022.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix022_PSO_OPT/mix022.c b/regression/goto-instrument-wmm-core/x86_mix022_PSO_OPT/mix022.c new file mode 100644 index 00000000000..da32aead480 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_PSO_OPT/mix022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix022_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix022_PSO_OPT/test.desc new file mode 100644 index 00000000000..bf54bea00fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix022.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix022_RMO_ALL/mix022.c b/regression/goto-instrument-wmm-core/x86_mix022_RMO_ALL/mix022.c new file mode 100644 index 00000000000..da32aead480 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_RMO_ALL/mix022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix022_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix022_RMO_ALL/test.desc new file mode 100644 index 00000000000..5cc04f7055d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix022.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix022_RMO_OPC/mix022.c b/regression/goto-instrument-wmm-core/x86_mix022_RMO_OPC/mix022.c new file mode 100644 index 00000000000..da32aead480 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_RMO_OPC/mix022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix022_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix022_RMO_OPC/test.desc new file mode 100644 index 00000000000..f5cbc2582da --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix022.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix022_RMO_OPT/mix022.c b/regression/goto-instrument-wmm-core/x86_mix022_RMO_OPT/mix022.c new file mode 100644 index 00000000000..da32aead480 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_RMO_OPT/mix022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix022_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix022_RMO_OPT/test.desc new file mode 100644 index 00000000000..dd299aa2424 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix022.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix022_SC_SAFE/mix022.c b/regression/goto-instrument-wmm-core/x86_mix022_SC_SAFE/mix022.c new file mode 100644 index 00000000000..da32aead480 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_SC_SAFE/mix022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix022_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix022_SC_SAFE/test.desc new file mode 100644 index 00000000000..f290d75321e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix022.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix022_TSO_ALL/mix022.c b/regression/goto-instrument-wmm-core/x86_mix022_TSO_ALL/mix022.c new file mode 100644 index 00000000000..da32aead480 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_TSO_ALL/mix022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix022_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix022_TSO_ALL/test.desc new file mode 100644 index 00000000000..957b24de3e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix022.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix022_TSO_OPC/mix022.c b/regression/goto-instrument-wmm-core/x86_mix022_TSO_OPC/mix022.c new file mode 100644 index 00000000000..da32aead480 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_TSO_OPC/mix022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix022_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix022_TSO_OPC/test.desc new file mode 100644 index 00000000000..edae7ed1510 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix022.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix022_TSO_OPT/mix022.c b/regression/goto-instrument-wmm-core/x86_mix022_TSO_OPT/mix022.c new file mode 100644 index 00000000000..da32aead480 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_TSO_OPT/mix022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix022_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix022_TSO_OPT/test.desc new file mode 100644 index 00000000000..a5d8cc960a0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix022_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix022.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix023_CAV11_ERROR/mix023.c b/regression/goto-instrument-wmm-core/x86_mix023_CAV11_ERROR/mix023.c new file mode 100644 index 00000000000..4cbc63f07b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_CAV11_ERROR/mix023.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix023_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix023_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..00355eee15f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix023.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix023_POWER_ALL/mix023.c b/regression/goto-instrument-wmm-core/x86_mix023_POWER_ALL/mix023.c new file mode 100644 index 00000000000..4cbc63f07b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_POWER_ALL/mix023.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix023_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix023_POWER_ALL/test.desc new file mode 100644 index 00000000000..5ea9607f5ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix023.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix023_POWER_OPC/mix023.c b/regression/goto-instrument-wmm-core/x86_mix023_POWER_OPC/mix023.c new file mode 100644 index 00000000000..4cbc63f07b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_POWER_OPC/mix023.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix023_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix023_POWER_OPC/test.desc new file mode 100644 index 00000000000..995d82e092d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix023.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix023_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix023_POWER_OPT/test.desc index 0f44735c46a..58be4916b66 100644 --- a/regression/goto-instrument-wmm-core/x86_mix023_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix023_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix023.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix023_PSO_ALL/mix023.c b/regression/goto-instrument-wmm-core/x86_mix023_PSO_ALL/mix023.c new file mode 100644 index 00000000000..4cbc63f07b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_PSO_ALL/mix023.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix023_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix023_PSO_ALL/test.desc new file mode 100644 index 00000000000..fef3aaf064d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix023.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix023_PSO_OPC/mix023.c b/regression/goto-instrument-wmm-core/x86_mix023_PSO_OPC/mix023.c new file mode 100644 index 00000000000..4cbc63f07b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_PSO_OPC/mix023.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix023_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix023_PSO_OPC/test.desc new file mode 100644 index 00000000000..e6ad3f1f55a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix023.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix023_PSO_OPT/mix023.c b/regression/goto-instrument-wmm-core/x86_mix023_PSO_OPT/mix023.c new file mode 100644 index 00000000000..4cbc63f07b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_PSO_OPT/mix023.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix023_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix023_PSO_OPT/test.desc new file mode 100644 index 00000000000..2cd2e1da8cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix023.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix023_RMO_ALL/mix023.c b/regression/goto-instrument-wmm-core/x86_mix023_RMO_ALL/mix023.c new file mode 100644 index 00000000000..4cbc63f07b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_RMO_ALL/mix023.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix023_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix023_RMO_ALL/test.desc new file mode 100644 index 00000000000..fa424ea7582 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix023.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix023_RMO_OPC/mix023.c b/regression/goto-instrument-wmm-core/x86_mix023_RMO_OPC/mix023.c new file mode 100644 index 00000000000..4cbc63f07b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_RMO_OPC/mix023.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix023_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix023_RMO_OPC/test.desc new file mode 100644 index 00000000000..047e92f8c7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix023.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix023_RMO_OPT/mix023.c b/regression/goto-instrument-wmm-core/x86_mix023_RMO_OPT/mix023.c new file mode 100644 index 00000000000..4cbc63f07b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_RMO_OPT/mix023.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix023_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix023_RMO_OPT/test.desc new file mode 100644 index 00000000000..de0807b6a62 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix023.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix023_SC_SAFE/mix023.c b/regression/goto-instrument-wmm-core/x86_mix023_SC_SAFE/mix023.c new file mode 100644 index 00000000000..4cbc63f07b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_SC_SAFE/mix023.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix023_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix023_SC_SAFE/test.desc new file mode 100644 index 00000000000..f7cc691a41b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix023.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix023_TSO_ALL/mix023.c b/regression/goto-instrument-wmm-core/x86_mix023_TSO_ALL/mix023.c new file mode 100644 index 00000000000..4cbc63f07b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_TSO_ALL/mix023.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix023_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix023_TSO_ALL/test.desc new file mode 100644 index 00000000000..b42699963c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix023.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix023_TSO_OPC/mix023.c b/regression/goto-instrument-wmm-core/x86_mix023_TSO_OPC/mix023.c new file mode 100644 index 00000000000..4cbc63f07b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_TSO_OPC/mix023.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix023_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix023_TSO_OPC/test.desc new file mode 100644 index 00000000000..af229003bbf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix023_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix023.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix023_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix023_TSO_OPT/test.desc index ee595ced38b..b73734eade8 100644 --- a/regression/goto-instrument-wmm-core/x86_mix023_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix023_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix023.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix024_CAV11_ERROR/mix024.c b/regression/goto-instrument-wmm-core/x86_mix024_CAV11_ERROR/mix024.c new file mode 100644 index 00000000000..5be6560ee6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_CAV11_ERROR/mix024.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 2; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix024_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix024_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..849c18fc591 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix024.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix024_POWER_ALL/mix024.c b/regression/goto-instrument-wmm-core/x86_mix024_POWER_ALL/mix024.c new file mode 100644 index 00000000000..5be6560ee6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_POWER_ALL/mix024.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 2; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix024_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix024_POWER_ALL/test.desc new file mode 100644 index 00000000000..31777823281 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix024.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix024_POWER_OPC/mix024.c b/regression/goto-instrument-wmm-core/x86_mix024_POWER_OPC/mix024.c new file mode 100644 index 00000000000..5be6560ee6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_POWER_OPC/mix024.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 2; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix024_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix024_POWER_OPC/test.desc new file mode 100644 index 00000000000..6cfe45b2d93 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix024.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix024_POWER_OPT/mix024.c b/regression/goto-instrument-wmm-core/x86_mix024_POWER_OPT/mix024.c new file mode 100644 index 00000000000..5be6560ee6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_POWER_OPT/mix024.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 2; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix024_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix024_POWER_OPT/test.desc new file mode 100644 index 00000000000..58c499b4a84 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix024.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix024_PSO_ALL/mix024.c b/regression/goto-instrument-wmm-core/x86_mix024_PSO_ALL/mix024.c new file mode 100644 index 00000000000..5be6560ee6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_PSO_ALL/mix024.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 2; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix024_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix024_PSO_ALL/test.desc new file mode 100644 index 00000000000..46160833eac --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix024.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix024_PSO_OPC/mix024.c b/regression/goto-instrument-wmm-core/x86_mix024_PSO_OPC/mix024.c new file mode 100644 index 00000000000..5be6560ee6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_PSO_OPC/mix024.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 2; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix024_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix024_PSO_OPC/test.desc new file mode 100644 index 00000000000..d0eec19fbdb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix024.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix024_PSO_OPT/mix024.c b/regression/goto-instrument-wmm-core/x86_mix024_PSO_OPT/mix024.c new file mode 100644 index 00000000000..5be6560ee6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_PSO_OPT/mix024.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 2; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix024_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix024_PSO_OPT/test.desc new file mode 100644 index 00000000000..fb89af961e1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix024.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix024_RMO_ALL/mix024.c b/regression/goto-instrument-wmm-core/x86_mix024_RMO_ALL/mix024.c new file mode 100644 index 00000000000..5be6560ee6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_RMO_ALL/mix024.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 2; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix024_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix024_RMO_ALL/test.desc new file mode 100644 index 00000000000..b7ca0a07ca6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix024.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix024_RMO_OPC/mix024.c b/regression/goto-instrument-wmm-core/x86_mix024_RMO_OPC/mix024.c new file mode 100644 index 00000000000..5be6560ee6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_RMO_OPC/mix024.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 2; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix024_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix024_RMO_OPC/test.desc new file mode 100644 index 00000000000..5fe179b829c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix024.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix024_RMO_OPT/mix024.c b/regression/goto-instrument-wmm-core/x86_mix024_RMO_OPT/mix024.c new file mode 100644 index 00000000000..5be6560ee6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_RMO_OPT/mix024.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 2; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix024_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix024_RMO_OPT/test.desc new file mode 100644 index 00000000000..29c0f08ddd9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix024.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix024_SC_SAFE/mix024.c b/regression/goto-instrument-wmm-core/x86_mix024_SC_SAFE/mix024.c new file mode 100644 index 00000000000..5be6560ee6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_SC_SAFE/mix024.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 2; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix024_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix024_SC_SAFE/test.desc new file mode 100644 index 00000000000..d9e4ca04a9d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix024.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix024_TSO_ALL/mix024.c b/regression/goto-instrument-wmm-core/x86_mix024_TSO_ALL/mix024.c new file mode 100644 index 00000000000..5be6560ee6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_TSO_ALL/mix024.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 2; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix024_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix024_TSO_ALL/test.desc new file mode 100644 index 00000000000..cd51f8f384d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix024.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix024_TSO_OPC/mix024.c b/regression/goto-instrument-wmm-core/x86_mix024_TSO_OPC/mix024.c new file mode 100644 index 00000000000..5be6560ee6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_TSO_OPC/mix024.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 2; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix024_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix024_TSO_OPC/test.desc new file mode 100644 index 00000000000..1b778a9eba0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix024.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix024_TSO_OPT/mix024.c b/regression/goto-instrument-wmm-core/x86_mix024_TSO_OPT/mix024.c new file mode 100644 index 00000000000..5be6560ee6e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_TSO_OPT/mix024.c @@ -0,0 +1,70 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 2; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix024_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix024_TSO_OPT/test.desc new file mode 100644 index 00000000000..038241b6e48 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix024_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix024.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix025_CAV11_ERROR/mix025.c b/regression/goto-instrument-wmm-core/x86_mix025_CAV11_ERROR/mix025.c new file mode 100644 index 00000000000..05efe500d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_CAV11_ERROR/mix025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix025_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix025_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..49d045fedd1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix025.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix025_POWER_ALL/mix025.c b/regression/goto-instrument-wmm-core/x86_mix025_POWER_ALL/mix025.c new file mode 100644 index 00000000000..05efe500d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_POWER_ALL/mix025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix025_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix025_POWER_ALL/test.desc new file mode 100644 index 00000000000..9fc09317aa7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix025.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix025_POWER_OPC/mix025.c b/regression/goto-instrument-wmm-core/x86_mix025_POWER_OPC/mix025.c new file mode 100644 index 00000000000..05efe500d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_POWER_OPC/mix025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix025_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix025_POWER_OPC/test.desc new file mode 100644 index 00000000000..1404420ca7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix025.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix025_POWER_OPT/mix025.c b/regression/goto-instrument-wmm-core/x86_mix025_POWER_OPT/mix025.c new file mode 100644 index 00000000000..05efe500d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_POWER_OPT/mix025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix025_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix025_POWER_OPT/test.desc new file mode 100644 index 00000000000..70984da8236 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix025.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix025_PSO_ALL/mix025.c b/regression/goto-instrument-wmm-core/x86_mix025_PSO_ALL/mix025.c new file mode 100644 index 00000000000..05efe500d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_PSO_ALL/mix025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix025_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix025_PSO_ALL/test.desc new file mode 100644 index 00000000000..ef4aba26d8d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix025.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix025_PSO_OPC/mix025.c b/regression/goto-instrument-wmm-core/x86_mix025_PSO_OPC/mix025.c new file mode 100644 index 00000000000..05efe500d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_PSO_OPC/mix025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix025_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix025_PSO_OPC/test.desc new file mode 100644 index 00000000000..bfa34677f0a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix025.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix025_PSO_OPT/mix025.c b/regression/goto-instrument-wmm-core/x86_mix025_PSO_OPT/mix025.c new file mode 100644 index 00000000000..05efe500d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_PSO_OPT/mix025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix025_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix025_PSO_OPT/test.desc new file mode 100644 index 00000000000..e97af937f2e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix025.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix025_RMO_ALL/mix025.c b/regression/goto-instrument-wmm-core/x86_mix025_RMO_ALL/mix025.c new file mode 100644 index 00000000000..05efe500d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_RMO_ALL/mix025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix025_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix025_RMO_ALL/test.desc new file mode 100644 index 00000000000..139bc3d5b43 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix025.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix025_RMO_OPC/mix025.c b/regression/goto-instrument-wmm-core/x86_mix025_RMO_OPC/mix025.c new file mode 100644 index 00000000000..05efe500d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_RMO_OPC/mix025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix025_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix025_RMO_OPC/test.desc new file mode 100644 index 00000000000..2b0938c3ed6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix025.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix025_RMO_OPT/mix025.c b/regression/goto-instrument-wmm-core/x86_mix025_RMO_OPT/mix025.c new file mode 100644 index 00000000000..05efe500d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_RMO_OPT/mix025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix025_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix025_RMO_OPT/test.desc new file mode 100644 index 00000000000..3aaaf439bd4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix025.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix025_SC_SAFE/mix025.c b/regression/goto-instrument-wmm-core/x86_mix025_SC_SAFE/mix025.c new file mode 100644 index 00000000000..05efe500d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_SC_SAFE/mix025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix025_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix025_SC_SAFE/test.desc new file mode 100644 index 00000000000..e685174818f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix025.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix025_TSO_ALL/mix025.c b/regression/goto-instrument-wmm-core/x86_mix025_TSO_ALL/mix025.c new file mode 100644 index 00000000000..05efe500d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_TSO_ALL/mix025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix025_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix025_TSO_ALL/test.desc new file mode 100644 index 00000000000..822563d0c2f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix025.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix025_TSO_OPC/mix025.c b/regression/goto-instrument-wmm-core/x86_mix025_TSO_OPC/mix025.c new file mode 100644 index 00000000000..05efe500d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_TSO_OPC/mix025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix025_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix025_TSO_OPC/test.desc new file mode 100644 index 00000000000..39093517a37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix025.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix025_TSO_OPT/mix025.c b/regression/goto-instrument-wmm-core/x86_mix025_TSO_OPT/mix025.c new file mode 100644 index 00000000000..05efe500d58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_TSO_OPT/mix025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix025_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix025_TSO_OPT/test.desc new file mode 100644 index 00000000000..7875525e777 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix025_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix025.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix026_CAV11_ERROR/mix026.c b/regression/goto-instrument-wmm-core/x86_mix026_CAV11_ERROR/mix026.c new file mode 100644 index 00000000000..85cd0ab7276 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_CAV11_ERROR/mix026.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix026_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix026_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..c731b502378 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix026.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix026_POWER_ALL/mix026.c b/regression/goto-instrument-wmm-core/x86_mix026_POWER_ALL/mix026.c new file mode 100644 index 00000000000..85cd0ab7276 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_POWER_ALL/mix026.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix026_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix026_POWER_ALL/test.desc new file mode 100644 index 00000000000..6c3bd85c428 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix026.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix026_POWER_OPC/mix026.c b/regression/goto-instrument-wmm-core/x86_mix026_POWER_OPC/mix026.c new file mode 100644 index 00000000000..85cd0ab7276 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_POWER_OPC/mix026.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix026_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix026_POWER_OPC/test.desc new file mode 100644 index 00000000000..075e6f753f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix026.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix026_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix026_POWER_OPT/test.desc index 1ee909d064b..7a8cd81e101 100644 --- a/regression/goto-instrument-wmm-core/x86_mix026_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix026_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix026.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix026_PSO_ALL/mix026.c b/regression/goto-instrument-wmm-core/x86_mix026_PSO_ALL/mix026.c new file mode 100644 index 00000000000..85cd0ab7276 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_PSO_ALL/mix026.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix026_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix026_PSO_ALL/test.desc new file mode 100644 index 00000000000..ed69c4f25dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix026.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix026_PSO_OPC/mix026.c b/regression/goto-instrument-wmm-core/x86_mix026_PSO_OPC/mix026.c new file mode 100644 index 00000000000..85cd0ab7276 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_PSO_OPC/mix026.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix026_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix026_PSO_OPC/test.desc new file mode 100644 index 00000000000..3854647c08a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix026.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix026_PSO_OPT/mix026.c b/regression/goto-instrument-wmm-core/x86_mix026_PSO_OPT/mix026.c new file mode 100644 index 00000000000..85cd0ab7276 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_PSO_OPT/mix026.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix026_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix026_PSO_OPT/test.desc new file mode 100644 index 00000000000..11b1766854c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix026.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix026_RMO_ALL/mix026.c b/regression/goto-instrument-wmm-core/x86_mix026_RMO_ALL/mix026.c new file mode 100644 index 00000000000..85cd0ab7276 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_RMO_ALL/mix026.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix026_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix026_RMO_ALL/test.desc new file mode 100644 index 00000000000..88618a69fec --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix026.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix026_RMO_OPC/mix026.c b/regression/goto-instrument-wmm-core/x86_mix026_RMO_OPC/mix026.c new file mode 100644 index 00000000000..85cd0ab7276 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_RMO_OPC/mix026.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix026_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix026_RMO_OPC/test.desc new file mode 100644 index 00000000000..b8078c0e8e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix026.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix026_RMO_OPT/mix026.c b/regression/goto-instrument-wmm-core/x86_mix026_RMO_OPT/mix026.c new file mode 100644 index 00000000000..85cd0ab7276 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_RMO_OPT/mix026.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix026_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix026_RMO_OPT/test.desc new file mode 100644 index 00000000000..8e785b880bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix026.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix026_SC_SAFE/mix026.c b/regression/goto-instrument-wmm-core/x86_mix026_SC_SAFE/mix026.c new file mode 100644 index 00000000000..85cd0ab7276 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_SC_SAFE/mix026.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix026_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix026_SC_SAFE/test.desc new file mode 100644 index 00000000000..c903fdbb711 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix026.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix026_TSO_ALL/mix026.c b/regression/goto-instrument-wmm-core/x86_mix026_TSO_ALL/mix026.c new file mode 100644 index 00000000000..85cd0ab7276 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_TSO_ALL/mix026.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix026_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix026_TSO_ALL/test.desc new file mode 100644 index 00000000000..b49e486dfd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix026.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix026_TSO_OPC/mix026.c b/regression/goto-instrument-wmm-core/x86_mix026_TSO_OPC/mix026.c new file mode 100644 index 00000000000..85cd0ab7276 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_TSO_OPC/mix026.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix026_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix026_TSO_OPC/test.desc new file mode 100644 index 00000000000..294275d35d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix026_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix026.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix026_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix026_TSO_OPT/test.desc index 5eaf386f101..b5a7143060c 100644 --- a/regression/goto-instrument-wmm-core/x86_mix026_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix026_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix026.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix027_CAV11_ERROR/mix027.c b/regression/goto-instrument-wmm-core/x86_mix027_CAV11_ERROR/mix027.c new file mode 100644 index 00000000000..287b7ed9e57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_CAV11_ERROR/mix027.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix027_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix027_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..25b95ea6503 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix027.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix027_POWER_ALL/mix027.c b/regression/goto-instrument-wmm-core/x86_mix027_POWER_ALL/mix027.c new file mode 100644 index 00000000000..287b7ed9e57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_POWER_ALL/mix027.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix027_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix027_POWER_ALL/test.desc new file mode 100644 index 00000000000..9bfc6212ba2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix027.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix027_POWER_OPC/mix027.c b/regression/goto-instrument-wmm-core/x86_mix027_POWER_OPC/mix027.c new file mode 100644 index 00000000000..287b7ed9e57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_POWER_OPC/mix027.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix027_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix027_POWER_OPC/test.desc new file mode 100644 index 00000000000..7a64adc9901 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix027.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix027_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix027_POWER_OPT/test.desc index a169c499875..22a759e3a57 100644 --- a/regression/goto-instrument-wmm-core/x86_mix027_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix027_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix027.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix027_PSO_ALL/mix027.c b/regression/goto-instrument-wmm-core/x86_mix027_PSO_ALL/mix027.c new file mode 100644 index 00000000000..287b7ed9e57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_PSO_ALL/mix027.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix027_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix027_PSO_ALL/test.desc new file mode 100644 index 00000000000..0db81ab402d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix027.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix027_PSO_OPC/mix027.c b/regression/goto-instrument-wmm-core/x86_mix027_PSO_OPC/mix027.c new file mode 100644 index 00000000000..287b7ed9e57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_PSO_OPC/mix027.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix027_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix027_PSO_OPC/test.desc new file mode 100644 index 00000000000..4dd4eb512a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix027.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix027_PSO_OPT/mix027.c b/regression/goto-instrument-wmm-core/x86_mix027_PSO_OPT/mix027.c new file mode 100644 index 00000000000..287b7ed9e57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_PSO_OPT/mix027.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix027_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix027_PSO_OPT/test.desc new file mode 100644 index 00000000000..2ee63731656 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix027.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix027_RMO_ALL/mix027.c b/regression/goto-instrument-wmm-core/x86_mix027_RMO_ALL/mix027.c new file mode 100644 index 00000000000..287b7ed9e57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_RMO_ALL/mix027.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix027_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix027_RMO_ALL/test.desc new file mode 100644 index 00000000000..e57a058c924 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix027.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix027_RMO_OPC/mix027.c b/regression/goto-instrument-wmm-core/x86_mix027_RMO_OPC/mix027.c new file mode 100644 index 00000000000..287b7ed9e57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_RMO_OPC/mix027.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix027_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix027_RMO_OPC/test.desc new file mode 100644 index 00000000000..bab06efa22d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix027.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix027_RMO_OPT/mix027.c b/regression/goto-instrument-wmm-core/x86_mix027_RMO_OPT/mix027.c new file mode 100644 index 00000000000..287b7ed9e57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_RMO_OPT/mix027.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix027_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix027_RMO_OPT/test.desc new file mode 100644 index 00000000000..8abb95d1574 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix027.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix027_SC_SAFE/mix027.c b/regression/goto-instrument-wmm-core/x86_mix027_SC_SAFE/mix027.c new file mode 100644 index 00000000000..287b7ed9e57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_SC_SAFE/mix027.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix027_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix027_SC_SAFE/test.desc new file mode 100644 index 00000000000..4171b589129 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix027.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix027_TSO_ALL/mix027.c b/regression/goto-instrument-wmm-core/x86_mix027_TSO_ALL/mix027.c new file mode 100644 index 00000000000..287b7ed9e57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_TSO_ALL/mix027.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix027_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix027_TSO_ALL/test.desc new file mode 100644 index 00000000000..4f05e37e1a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix027.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix027_TSO_OPC/mix027.c b/regression/goto-instrument-wmm-core/x86_mix027_TSO_OPC/mix027.c new file mode 100644 index 00000000000..287b7ed9e57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_TSO_OPC/mix027.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix027_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix027_TSO_OPC/test.desc new file mode 100644 index 00000000000..12df37b9ce2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix027_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix027.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix027_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix027_TSO_OPT/test.desc index 0fb2fee1acd..7456ac7d4a1 100644 --- a/regression/goto-instrument-wmm-core/x86_mix027_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix027_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix027.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix028_CAV11_ERROR/mix028.c b/regression/goto-instrument-wmm-core/x86_mix028_CAV11_ERROR/mix028.c new file mode 100644 index 00000000000..c78c57a4539 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_CAV11_ERROR/mix028.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix028_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix028_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..46395b27042 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix028.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix028_POWER_ALL/mix028.c b/regression/goto-instrument-wmm-core/x86_mix028_POWER_ALL/mix028.c new file mode 100644 index 00000000000..c78c57a4539 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_POWER_ALL/mix028.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix028_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix028_POWER_ALL/test.desc new file mode 100644 index 00000000000..9d8af788211 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix028.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix028_POWER_OPC/mix028.c b/regression/goto-instrument-wmm-core/x86_mix028_POWER_OPC/mix028.c new file mode 100644 index 00000000000..c78c57a4539 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_POWER_OPC/mix028.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix028_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix028_POWER_OPC/test.desc new file mode 100644 index 00000000000..6dc2f0ce022 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix028.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix028_POWER_OPT/mix028.c b/regression/goto-instrument-wmm-core/x86_mix028_POWER_OPT/mix028.c new file mode 100644 index 00000000000..c78c57a4539 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_POWER_OPT/mix028.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix028_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix028_POWER_OPT/test.desc new file mode 100644 index 00000000000..a4e71d69ace --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix028.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix028_PSO_ALL/mix028.c b/regression/goto-instrument-wmm-core/x86_mix028_PSO_ALL/mix028.c new file mode 100644 index 00000000000..c78c57a4539 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_PSO_ALL/mix028.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix028_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix028_PSO_ALL/test.desc new file mode 100644 index 00000000000..dea23f351f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix028.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix028_PSO_OPC/mix028.c b/regression/goto-instrument-wmm-core/x86_mix028_PSO_OPC/mix028.c new file mode 100644 index 00000000000..c78c57a4539 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_PSO_OPC/mix028.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix028_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix028_PSO_OPC/test.desc new file mode 100644 index 00000000000..73d480b8f9e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix028.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix028_PSO_OPT/mix028.c b/regression/goto-instrument-wmm-core/x86_mix028_PSO_OPT/mix028.c new file mode 100644 index 00000000000..c78c57a4539 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_PSO_OPT/mix028.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix028_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix028_PSO_OPT/test.desc new file mode 100644 index 00000000000..54d726aa65a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix028.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix028_RMO_ALL/mix028.c b/regression/goto-instrument-wmm-core/x86_mix028_RMO_ALL/mix028.c new file mode 100644 index 00000000000..c78c57a4539 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_RMO_ALL/mix028.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix028_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix028_RMO_ALL/test.desc new file mode 100644 index 00000000000..f9652d6d3cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix028.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix028_RMO_OPC/mix028.c b/regression/goto-instrument-wmm-core/x86_mix028_RMO_OPC/mix028.c new file mode 100644 index 00000000000..c78c57a4539 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_RMO_OPC/mix028.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix028_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix028_RMO_OPC/test.desc new file mode 100644 index 00000000000..31079dffdf1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix028.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix028_RMO_OPT/mix028.c b/regression/goto-instrument-wmm-core/x86_mix028_RMO_OPT/mix028.c new file mode 100644 index 00000000000..c78c57a4539 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_RMO_OPT/mix028.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix028_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix028_RMO_OPT/test.desc new file mode 100644 index 00000000000..7fed84d1282 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix028.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix028_SC_SAFE/mix028.c b/regression/goto-instrument-wmm-core/x86_mix028_SC_SAFE/mix028.c new file mode 100644 index 00000000000..c78c57a4539 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_SC_SAFE/mix028.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix028_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix028_SC_SAFE/test.desc new file mode 100644 index 00000000000..763ac535bdf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix028.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix028_TSO_ALL/mix028.c b/regression/goto-instrument-wmm-core/x86_mix028_TSO_ALL/mix028.c new file mode 100644 index 00000000000..c78c57a4539 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_TSO_ALL/mix028.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix028_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix028_TSO_ALL/test.desc new file mode 100644 index 00000000000..cc5c682204c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix028.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix028_TSO_OPC/mix028.c b/regression/goto-instrument-wmm-core/x86_mix028_TSO_OPC/mix028.c new file mode 100644 index 00000000000..c78c57a4539 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_TSO_OPC/mix028.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix028_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix028_TSO_OPC/test.desc new file mode 100644 index 00000000000..88358cb16f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix028.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix028_TSO_OPT/mix028.c b/regression/goto-instrument-wmm-core/x86_mix028_TSO_OPT/mix028.c new file mode 100644 index 00000000000..c78c57a4539 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_TSO_OPT/mix028.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix028_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix028_TSO_OPT/test.desc new file mode 100644 index 00000000000..24909316182 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix028_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix028.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix029_CAV11_ERROR/mix029.c b/regression/goto-instrument-wmm-core/x86_mix029_CAV11_ERROR/mix029.c new file mode 100644 index 00000000000..6761e730a9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_CAV11_ERROR/mix029.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix029_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix029_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..e54e45446de --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix029.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix029_POWER_ALL/mix029.c b/regression/goto-instrument-wmm-core/x86_mix029_POWER_ALL/mix029.c new file mode 100644 index 00000000000..6761e730a9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_POWER_ALL/mix029.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix029_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix029_POWER_ALL/test.desc new file mode 100644 index 00000000000..ac8e028fed0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix029.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix029_POWER_OPC/mix029.c b/regression/goto-instrument-wmm-core/x86_mix029_POWER_OPC/mix029.c new file mode 100644 index 00000000000..6761e730a9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_POWER_OPC/mix029.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix029_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix029_POWER_OPC/test.desc new file mode 100644 index 00000000000..9e47689ee94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix029.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix029_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix029_POWER_OPT/test.desc index fd59c286c39..93ff1894a4a 100644 --- a/regression/goto-instrument-wmm-core/x86_mix029_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix029_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix029.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix029_PSO_ALL/mix029.c b/regression/goto-instrument-wmm-core/x86_mix029_PSO_ALL/mix029.c new file mode 100644 index 00000000000..6761e730a9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_PSO_ALL/mix029.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix029_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix029_PSO_ALL/test.desc new file mode 100644 index 00000000000..cd61cfd2e10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix029.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix029_PSO_OPC/mix029.c b/regression/goto-instrument-wmm-core/x86_mix029_PSO_OPC/mix029.c new file mode 100644 index 00000000000..6761e730a9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_PSO_OPC/mix029.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix029_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix029_PSO_OPC/test.desc new file mode 100644 index 00000000000..0410d4185bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix029.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix029_PSO_OPT/mix029.c b/regression/goto-instrument-wmm-core/x86_mix029_PSO_OPT/mix029.c new file mode 100644 index 00000000000..6761e730a9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_PSO_OPT/mix029.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix029_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix029_PSO_OPT/test.desc new file mode 100644 index 00000000000..2ff3c6549a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix029.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix029_RMO_ALL/mix029.c b/regression/goto-instrument-wmm-core/x86_mix029_RMO_ALL/mix029.c new file mode 100644 index 00000000000..6761e730a9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_RMO_ALL/mix029.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix029_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix029_RMO_ALL/test.desc new file mode 100644 index 00000000000..6de3d04c263 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix029.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix029_RMO_OPC/mix029.c b/regression/goto-instrument-wmm-core/x86_mix029_RMO_OPC/mix029.c new file mode 100644 index 00000000000..6761e730a9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_RMO_OPC/mix029.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix029_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix029_RMO_OPC/test.desc new file mode 100644 index 00000000000..d575d7f087e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix029.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix029_RMO_OPT/mix029.c b/regression/goto-instrument-wmm-core/x86_mix029_RMO_OPT/mix029.c new file mode 100644 index 00000000000..6761e730a9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_RMO_OPT/mix029.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix029_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix029_RMO_OPT/test.desc new file mode 100644 index 00000000000..2c0b4deb61f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix029.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix029_SC_SAFE/mix029.c b/regression/goto-instrument-wmm-core/x86_mix029_SC_SAFE/mix029.c new file mode 100644 index 00000000000..6761e730a9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_SC_SAFE/mix029.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix029_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix029_SC_SAFE/test.desc new file mode 100644 index 00000000000..703e3980ae8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix029.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix029_TSO_ALL/mix029.c b/regression/goto-instrument-wmm-core/x86_mix029_TSO_ALL/mix029.c new file mode 100644 index 00000000000..6761e730a9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_TSO_ALL/mix029.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix029_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix029_TSO_ALL/test.desc new file mode 100644 index 00000000000..570d10dc538 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix029.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix029_TSO_OPC/mix029.c b/regression/goto-instrument-wmm-core/x86_mix029_TSO_OPC/mix029.c new file mode 100644 index 00000000000..6761e730a9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_TSO_OPC/mix029.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 2 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix029_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix029_TSO_OPC/test.desc new file mode 100644 index 00000000000..c0a12e8c0a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix029_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix029.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix029_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix029_TSO_OPT/test.desc index f16dcaf8def..981f03d6bd8 100644 --- a/regression/goto-instrument-wmm-core/x86_mix029_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix029_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix029.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix030_CAV11_ERROR/mix030.c b/regression/goto-instrument-wmm-core/x86_mix030_CAV11_ERROR/mix030.c new file mode 100644 index 00000000000..4e4d8bd7cb1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_CAV11_ERROR/mix030.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix030_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix030_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..d12937ffdd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix030.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix030_POWER_ALL/mix030.c b/regression/goto-instrument-wmm-core/x86_mix030_POWER_ALL/mix030.c new file mode 100644 index 00000000000..4e4d8bd7cb1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_POWER_ALL/mix030.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix030_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix030_POWER_ALL/test.desc new file mode 100644 index 00000000000..9e36547304c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix030.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix030_POWER_OPC/mix030.c b/regression/goto-instrument-wmm-core/x86_mix030_POWER_OPC/mix030.c new file mode 100644 index 00000000000..4e4d8bd7cb1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_POWER_OPC/mix030.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix030_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix030_POWER_OPC/test.desc new file mode 100644 index 00000000000..5028a5b1b33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix030.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix030_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix030_POWER_OPT/test.desc index ac3a3be4bef..291f916d4b7 100644 --- a/regression/goto-instrument-wmm-core/x86_mix030_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix030_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix030.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix030_PSO_ALL/mix030.c b/regression/goto-instrument-wmm-core/x86_mix030_PSO_ALL/mix030.c new file mode 100644 index 00000000000..4e4d8bd7cb1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_PSO_ALL/mix030.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix030_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix030_PSO_ALL/test.desc new file mode 100644 index 00000000000..856fcd5078c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix030.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix030_PSO_OPC/mix030.c b/regression/goto-instrument-wmm-core/x86_mix030_PSO_OPC/mix030.c new file mode 100644 index 00000000000..4e4d8bd7cb1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_PSO_OPC/mix030.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix030_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix030_PSO_OPC/test.desc new file mode 100644 index 00000000000..7365e374a54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix030.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix030_PSO_OPT/mix030.c b/regression/goto-instrument-wmm-core/x86_mix030_PSO_OPT/mix030.c new file mode 100644 index 00000000000..4e4d8bd7cb1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_PSO_OPT/mix030.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix030_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix030_PSO_OPT/test.desc new file mode 100644 index 00000000000..2d65fe6ccc9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix030.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix030_RMO_ALL/mix030.c b/regression/goto-instrument-wmm-core/x86_mix030_RMO_ALL/mix030.c new file mode 100644 index 00000000000..4e4d8bd7cb1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_RMO_ALL/mix030.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix030_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix030_RMO_ALL/test.desc new file mode 100644 index 00000000000..d1a80819c08 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix030.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix030_RMO_OPC/mix030.c b/regression/goto-instrument-wmm-core/x86_mix030_RMO_OPC/mix030.c new file mode 100644 index 00000000000..4e4d8bd7cb1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_RMO_OPC/mix030.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix030_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix030_RMO_OPC/test.desc new file mode 100644 index 00000000000..fcd5d963152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix030.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix030_RMO_OPT/mix030.c b/regression/goto-instrument-wmm-core/x86_mix030_RMO_OPT/mix030.c new file mode 100644 index 00000000000..4e4d8bd7cb1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_RMO_OPT/mix030.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix030_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix030_RMO_OPT/test.desc new file mode 100644 index 00000000000..9d720462112 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix030.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix030_SC_SAFE/mix030.c b/regression/goto-instrument-wmm-core/x86_mix030_SC_SAFE/mix030.c new file mode 100644 index 00000000000..4e4d8bd7cb1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_SC_SAFE/mix030.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix030_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix030_SC_SAFE/test.desc new file mode 100644 index 00000000000..fbfbc8d672b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix030.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix030_TSO_ALL/mix030.c b/regression/goto-instrument-wmm-core/x86_mix030_TSO_ALL/mix030.c new file mode 100644 index 00000000000..4e4d8bd7cb1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_TSO_ALL/mix030.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix030_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix030_TSO_ALL/test.desc new file mode 100644 index 00000000000..f4e0ac6c1ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix030.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix030_TSO_OPC/mix030.c b/regression/goto-instrument-wmm-core/x86_mix030_TSO_OPC/mix030.c new file mode 100644 index 00000000000..4e4d8bd7cb1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_TSO_OPC/mix030.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = z; + __unbuffered_p3_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 2 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix030_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix030_TSO_OPC/test.desc new file mode 100644 index 00000000000..d9c3a0c2cc8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix030_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix030.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix030_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix030_TSO_OPT/test.desc index 357dfeb3b69..ac12be52ea2 100644 --- a/regression/goto-instrument-wmm-core/x86_mix030_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix030_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix030.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix031_CAV11_ERROR/mix031.c b/regression/goto-instrument-wmm-core/x86_mix031_CAV11_ERROR/mix031.c new file mode 100644 index 00000000000..98e26afb64f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_CAV11_ERROR/mix031.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix031_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix031_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..0bde3cc98b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix031.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix031_POWER_ALL/mix031.c b/regression/goto-instrument-wmm-core/x86_mix031_POWER_ALL/mix031.c new file mode 100644 index 00000000000..98e26afb64f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_POWER_ALL/mix031.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix031_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix031_POWER_ALL/test.desc new file mode 100644 index 00000000000..98da2dc5df3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix031.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix031_POWER_OPC/mix031.c b/regression/goto-instrument-wmm-core/x86_mix031_POWER_OPC/mix031.c new file mode 100644 index 00000000000..98e26afb64f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_POWER_OPC/mix031.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix031_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix031_POWER_OPC/test.desc new file mode 100644 index 00000000000..b92643ebfe0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix031.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix031_POWER_OPT/mix031.c b/regression/goto-instrument-wmm-core/x86_mix031_POWER_OPT/mix031.c new file mode 100644 index 00000000000..98e26afb64f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_POWER_OPT/mix031.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix031_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix031_POWER_OPT/test.desc new file mode 100644 index 00000000000..cb4e5de8fb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix031.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix031_PSO_ALL/mix031.c b/regression/goto-instrument-wmm-core/x86_mix031_PSO_ALL/mix031.c new file mode 100644 index 00000000000..98e26afb64f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_PSO_ALL/mix031.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix031_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix031_PSO_ALL/test.desc new file mode 100644 index 00000000000..c05abe13e69 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix031.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix031_PSO_OPC/mix031.c b/regression/goto-instrument-wmm-core/x86_mix031_PSO_OPC/mix031.c new file mode 100644 index 00000000000..98e26afb64f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_PSO_OPC/mix031.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix031_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix031_PSO_OPC/test.desc new file mode 100644 index 00000000000..a405b6c6fe8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix031.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix031_PSO_OPT/mix031.c b/regression/goto-instrument-wmm-core/x86_mix031_PSO_OPT/mix031.c new file mode 100644 index 00000000000..98e26afb64f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_PSO_OPT/mix031.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix031_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix031_PSO_OPT/test.desc new file mode 100644 index 00000000000..3e39b5a215d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix031.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix031_RMO_ALL/mix031.c b/regression/goto-instrument-wmm-core/x86_mix031_RMO_ALL/mix031.c new file mode 100644 index 00000000000..98e26afb64f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_RMO_ALL/mix031.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix031_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix031_RMO_ALL/test.desc new file mode 100644 index 00000000000..1629eab2dc2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix031.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix031_RMO_OPC/mix031.c b/regression/goto-instrument-wmm-core/x86_mix031_RMO_OPC/mix031.c new file mode 100644 index 00000000000..98e26afb64f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_RMO_OPC/mix031.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix031_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix031_RMO_OPC/test.desc new file mode 100644 index 00000000000..426fa654c85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix031.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix031_RMO_OPT/mix031.c b/regression/goto-instrument-wmm-core/x86_mix031_RMO_OPT/mix031.c new file mode 100644 index 00000000000..98e26afb64f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_RMO_OPT/mix031.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix031_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix031_RMO_OPT/test.desc new file mode 100644 index 00000000000..74a8b261dec --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix031.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix031_SC_SAFE/mix031.c b/regression/goto-instrument-wmm-core/x86_mix031_SC_SAFE/mix031.c new file mode 100644 index 00000000000..98e26afb64f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_SC_SAFE/mix031.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix031_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix031_SC_SAFE/test.desc new file mode 100644 index 00000000000..a20a6b06beb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix031.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix031_TSO_ALL/mix031.c b/regression/goto-instrument-wmm-core/x86_mix031_TSO_ALL/mix031.c new file mode 100644 index 00000000000..98e26afb64f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_TSO_ALL/mix031.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix031_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix031_TSO_ALL/test.desc new file mode 100644 index 00000000000..213766cca70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix031.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix031_TSO_OPC/mix031.c b/regression/goto-instrument-wmm-core/x86_mix031_TSO_OPC/mix031.c new file mode 100644 index 00000000000..98e26afb64f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_TSO_OPC/mix031.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix031_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix031_TSO_OPC/test.desc new file mode 100644 index 00000000000..f58d34a502b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix031.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix031_TSO_OPT/mix031.c b/regression/goto-instrument-wmm-core/x86_mix031_TSO_OPT/mix031.c new file mode 100644 index 00000000000..98e26afb64f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_TSO_OPT/mix031.c @@ -0,0 +1,60 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix031_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix031_TSO_OPT/test.desc new file mode 100644 index 00000000000..db0c893fd2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix031_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix031.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix032_CAV11_ERROR/mix032.c b/regression/goto-instrument-wmm-core/x86_mix032_CAV11_ERROR/mix032.c new file mode 100644 index 00000000000..70fa96ecd51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_CAV11_ERROR/mix032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix032_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix032_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..823ee2ded83 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix032.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix032_POWER_ALL/mix032.c b/regression/goto-instrument-wmm-core/x86_mix032_POWER_ALL/mix032.c new file mode 100644 index 00000000000..70fa96ecd51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_POWER_ALL/mix032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix032_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix032_POWER_ALL/test.desc new file mode 100644 index 00000000000..fea54e7e0f9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix032.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix032_POWER_OPC/mix032.c b/regression/goto-instrument-wmm-core/x86_mix032_POWER_OPC/mix032.c new file mode 100644 index 00000000000..70fa96ecd51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_POWER_OPC/mix032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix032_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix032_POWER_OPC/test.desc new file mode 100644 index 00000000000..93cb5da81d4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix032.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix032_POWER_OPT/mix032.c b/regression/goto-instrument-wmm-core/x86_mix032_POWER_OPT/mix032.c new file mode 100644 index 00000000000..70fa96ecd51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_POWER_OPT/mix032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix032_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix032_POWER_OPT/test.desc new file mode 100644 index 00000000000..b569d36b129 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix032.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix032_PSO_ALL/mix032.c b/regression/goto-instrument-wmm-core/x86_mix032_PSO_ALL/mix032.c new file mode 100644 index 00000000000..70fa96ecd51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_PSO_ALL/mix032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix032_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix032_PSO_ALL/test.desc new file mode 100644 index 00000000000..4c0426743c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix032.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix032_PSO_OPC/mix032.c b/regression/goto-instrument-wmm-core/x86_mix032_PSO_OPC/mix032.c new file mode 100644 index 00000000000..70fa96ecd51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_PSO_OPC/mix032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix032_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix032_PSO_OPC/test.desc new file mode 100644 index 00000000000..7db86d06abb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix032.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix032_PSO_OPT/mix032.c b/regression/goto-instrument-wmm-core/x86_mix032_PSO_OPT/mix032.c new file mode 100644 index 00000000000..70fa96ecd51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_PSO_OPT/mix032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix032_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix032_PSO_OPT/test.desc new file mode 100644 index 00000000000..f3da57920d1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix032.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix032_RMO_ALL/mix032.c b/regression/goto-instrument-wmm-core/x86_mix032_RMO_ALL/mix032.c new file mode 100644 index 00000000000..70fa96ecd51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_RMO_ALL/mix032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix032_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix032_RMO_ALL/test.desc new file mode 100644 index 00000000000..94d91362314 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix032.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix032_RMO_OPC/mix032.c b/regression/goto-instrument-wmm-core/x86_mix032_RMO_OPC/mix032.c new file mode 100644 index 00000000000..70fa96ecd51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_RMO_OPC/mix032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix032_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix032_RMO_OPC/test.desc new file mode 100644 index 00000000000..b4f22b2795b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix032.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix032_RMO_OPT/mix032.c b/regression/goto-instrument-wmm-core/x86_mix032_RMO_OPT/mix032.c new file mode 100644 index 00000000000..70fa96ecd51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_RMO_OPT/mix032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix032_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix032_RMO_OPT/test.desc new file mode 100644 index 00000000000..5291e34bb67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix032.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix032_SC_SAFE/mix032.c b/regression/goto-instrument-wmm-core/x86_mix032_SC_SAFE/mix032.c new file mode 100644 index 00000000000..70fa96ecd51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_SC_SAFE/mix032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix032_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix032_SC_SAFE/test.desc new file mode 100644 index 00000000000..5dce86cde7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix032.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix032_TSO_ALL/mix032.c b/regression/goto-instrument-wmm-core/x86_mix032_TSO_ALL/mix032.c new file mode 100644 index 00000000000..70fa96ecd51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_TSO_ALL/mix032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix032_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix032_TSO_ALL/test.desc new file mode 100644 index 00000000000..ef6e58a90bf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix032.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix032_TSO_OPC/mix032.c b/regression/goto-instrument-wmm-core/x86_mix032_TSO_OPC/mix032.c new file mode 100644 index 00000000000..70fa96ecd51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_TSO_OPC/mix032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix032_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix032_TSO_OPC/test.desc new file mode 100644 index 00000000000..04f62b900ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix032.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix032_TSO_OPT/mix032.c b/regression/goto-instrument-wmm-core/x86_mix032_TSO_OPT/mix032.c new file mode 100644 index 00000000000..70fa96ecd51 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_TSO_OPT/mix032.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix032_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix032_TSO_OPT/test.desc new file mode 100644 index 00000000000..ec630b2243a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix032_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix032.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix033_CAV11_ERROR/mix033.c b/regression/goto-instrument-wmm-core/x86_mix033_CAV11_ERROR/mix033.c new file mode 100644 index 00000000000..5cc0ba2d5fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_CAV11_ERROR/mix033.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix033_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix033_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..da8155bd1da --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix033.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix033_POWER_ALL/mix033.c b/regression/goto-instrument-wmm-core/x86_mix033_POWER_ALL/mix033.c new file mode 100644 index 00000000000..5cc0ba2d5fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_POWER_ALL/mix033.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix033_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix033_POWER_ALL/test.desc new file mode 100644 index 00000000000..87d5a7c58a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix033.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix033_POWER_OPC/mix033.c b/regression/goto-instrument-wmm-core/x86_mix033_POWER_OPC/mix033.c new file mode 100644 index 00000000000..5cc0ba2d5fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_POWER_OPC/mix033.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix033_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix033_POWER_OPC/test.desc new file mode 100644 index 00000000000..5c568771d57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix033.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix033_POWER_OPT/mix033.c b/regression/goto-instrument-wmm-core/x86_mix033_POWER_OPT/mix033.c new file mode 100644 index 00000000000..5cc0ba2d5fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_POWER_OPT/mix033.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix033_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix033_POWER_OPT/test.desc new file mode 100644 index 00000000000..44c00b9d972 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix033.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix033_PSO_ALL/mix033.c b/regression/goto-instrument-wmm-core/x86_mix033_PSO_ALL/mix033.c new file mode 100644 index 00000000000..5cc0ba2d5fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_PSO_ALL/mix033.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix033_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix033_PSO_ALL/test.desc new file mode 100644 index 00000000000..2a19858dbfd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix033.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix033_PSO_OPC/mix033.c b/regression/goto-instrument-wmm-core/x86_mix033_PSO_OPC/mix033.c new file mode 100644 index 00000000000..5cc0ba2d5fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_PSO_OPC/mix033.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix033_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix033_PSO_OPC/test.desc new file mode 100644 index 00000000000..cfbadeedf5c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix033.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix033_PSO_OPT/mix033.c b/regression/goto-instrument-wmm-core/x86_mix033_PSO_OPT/mix033.c new file mode 100644 index 00000000000..5cc0ba2d5fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_PSO_OPT/mix033.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix033_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix033_PSO_OPT/test.desc new file mode 100644 index 00000000000..cf1e24954f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix033.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix033_RMO_ALL/mix033.c b/regression/goto-instrument-wmm-core/x86_mix033_RMO_ALL/mix033.c new file mode 100644 index 00000000000..5cc0ba2d5fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_RMO_ALL/mix033.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix033_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix033_RMO_ALL/test.desc new file mode 100644 index 00000000000..1be52acd2a2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix033.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix033_RMO_OPC/mix033.c b/regression/goto-instrument-wmm-core/x86_mix033_RMO_OPC/mix033.c new file mode 100644 index 00000000000..5cc0ba2d5fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_RMO_OPC/mix033.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix033_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix033_RMO_OPC/test.desc new file mode 100644 index 00000000000..50426ab7998 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix033.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix033_RMO_OPT/mix033.c b/regression/goto-instrument-wmm-core/x86_mix033_RMO_OPT/mix033.c new file mode 100644 index 00000000000..5cc0ba2d5fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_RMO_OPT/mix033.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix033_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix033_RMO_OPT/test.desc new file mode 100644 index 00000000000..ca20655accf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix033.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix033_SC_SAFE/mix033.c b/regression/goto-instrument-wmm-core/x86_mix033_SC_SAFE/mix033.c new file mode 100644 index 00000000000..5cc0ba2d5fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_SC_SAFE/mix033.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix033_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix033_SC_SAFE/test.desc new file mode 100644 index 00000000000..33ce5500a2c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix033.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix033_TSO_ALL/mix033.c b/regression/goto-instrument-wmm-core/x86_mix033_TSO_ALL/mix033.c new file mode 100644 index 00000000000..5cc0ba2d5fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_TSO_ALL/mix033.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix033_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix033_TSO_ALL/test.desc new file mode 100644 index 00000000000..719c16d1e1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix033.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix033_TSO_OPC/mix033.c b/regression/goto-instrument-wmm-core/x86_mix033_TSO_OPC/mix033.c new file mode 100644 index 00000000000..5cc0ba2d5fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_TSO_OPC/mix033.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix033_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix033_TSO_OPC/test.desc new file mode 100644 index 00000000000..11f70678020 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix033.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix033_TSO_OPT/mix033.c b/regression/goto-instrument-wmm-core/x86_mix033_TSO_OPT/mix033.c new file mode 100644 index 00000000000..5cc0ba2d5fc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_TSO_OPT/mix033.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p2_EAX = a; + __unbuffered_p2_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix033_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix033_TSO_OPT/test.desc new file mode 100644 index 00000000000..e3b6c29897b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix033_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix033.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix034_CAV11_ERROR/mix034.c b/regression/goto-instrument-wmm-core/x86_mix034_CAV11_ERROR/mix034.c new file mode 100644 index 00000000000..df37c75bd0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_CAV11_ERROR/mix034.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix034_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix034_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..bd36ac3c2aa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix034.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix034_POWER_ALL/mix034.c b/regression/goto-instrument-wmm-core/x86_mix034_POWER_ALL/mix034.c new file mode 100644 index 00000000000..df37c75bd0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_POWER_ALL/mix034.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix034_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix034_POWER_ALL/test.desc new file mode 100644 index 00000000000..d5065dd5bbd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix034.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix034_POWER_OPC/mix034.c b/regression/goto-instrument-wmm-core/x86_mix034_POWER_OPC/mix034.c new file mode 100644 index 00000000000..df37c75bd0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_POWER_OPC/mix034.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix034_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix034_POWER_OPC/test.desc new file mode 100644 index 00000000000..0adf462590b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix034.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix034_POWER_OPT/mix034.c b/regression/goto-instrument-wmm-core/x86_mix034_POWER_OPT/mix034.c new file mode 100644 index 00000000000..df37c75bd0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_POWER_OPT/mix034.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix034_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix034_POWER_OPT/test.desc new file mode 100644 index 00000000000..da510b849e1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix034.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix034_PSO_ALL/mix034.c b/regression/goto-instrument-wmm-core/x86_mix034_PSO_ALL/mix034.c new file mode 100644 index 00000000000..df37c75bd0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_PSO_ALL/mix034.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix034_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix034_PSO_ALL/test.desc new file mode 100644 index 00000000000..300e20b6c26 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix034.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix034_PSO_OPC/mix034.c b/regression/goto-instrument-wmm-core/x86_mix034_PSO_OPC/mix034.c new file mode 100644 index 00000000000..df37c75bd0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_PSO_OPC/mix034.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix034_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix034_PSO_OPC/test.desc new file mode 100644 index 00000000000..01d0254dfaf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix034.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix034_PSO_OPT/mix034.c b/regression/goto-instrument-wmm-core/x86_mix034_PSO_OPT/mix034.c new file mode 100644 index 00000000000..df37c75bd0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_PSO_OPT/mix034.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix034_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix034_PSO_OPT/test.desc new file mode 100644 index 00000000000..8150e1130bf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix034.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix034_RMO_ALL/mix034.c b/regression/goto-instrument-wmm-core/x86_mix034_RMO_ALL/mix034.c new file mode 100644 index 00000000000..df37c75bd0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_RMO_ALL/mix034.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix034_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix034_RMO_ALL/test.desc new file mode 100644 index 00000000000..aa7bf470b8b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix034.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix034_RMO_OPC/mix034.c b/regression/goto-instrument-wmm-core/x86_mix034_RMO_OPC/mix034.c new file mode 100644 index 00000000000..df37c75bd0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_RMO_OPC/mix034.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix034_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix034_RMO_OPC/test.desc new file mode 100644 index 00000000000..279b242d829 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix034.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix034_RMO_OPT/mix034.c b/regression/goto-instrument-wmm-core/x86_mix034_RMO_OPT/mix034.c new file mode 100644 index 00000000000..df37c75bd0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_RMO_OPT/mix034.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix034_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix034_RMO_OPT/test.desc new file mode 100644 index 00000000000..ed4df1478f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix034.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix034_SC_SAFE/mix034.c b/regression/goto-instrument-wmm-core/x86_mix034_SC_SAFE/mix034.c new file mode 100644 index 00000000000..df37c75bd0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_SC_SAFE/mix034.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix034_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix034_SC_SAFE/test.desc new file mode 100644 index 00000000000..4cd7a449aa5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix034.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix034_TSO_ALL/mix034.c b/regression/goto-instrument-wmm-core/x86_mix034_TSO_ALL/mix034.c new file mode 100644 index 00000000000..df37c75bd0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_TSO_ALL/mix034.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix034_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix034_TSO_ALL/test.desc new file mode 100644 index 00000000000..919d638b57b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix034.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix034_TSO_OPC/mix034.c b/regression/goto-instrument-wmm-core/x86_mix034_TSO_OPC/mix034.c new file mode 100644 index 00000000000..df37c75bd0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_TSO_OPC/mix034.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix034_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix034_TSO_OPC/test.desc new file mode 100644 index 00000000000..ba1c0f8d004 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix034.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix034_TSO_OPT/mix034.c b/regression/goto-instrument-wmm-core/x86_mix034_TSO_OPT/mix034.c new file mode 100644 index 00000000000..df37c75bd0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_TSO_OPT/mix034.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix034_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix034_TSO_OPT/test.desc new file mode 100644 index 00000000000..f4f7c9dde68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix034_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix034.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix035_CAV11_ERROR/mix035.c b/regression/goto-instrument-wmm-core/x86_mix035_CAV11_ERROR/mix035.c new file mode 100644 index 00000000000..663f82f9c87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_CAV11_ERROR/mix035.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix035_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix035_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..c9b577390a0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix035.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix035_POWER_ALL/mix035.c b/regression/goto-instrument-wmm-core/x86_mix035_POWER_ALL/mix035.c new file mode 100644 index 00000000000..663f82f9c87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_POWER_ALL/mix035.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix035_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix035_POWER_ALL/test.desc new file mode 100644 index 00000000000..c505462de98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix035.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix035_POWER_OPC/mix035.c b/regression/goto-instrument-wmm-core/x86_mix035_POWER_OPC/mix035.c new file mode 100644 index 00000000000..663f82f9c87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_POWER_OPC/mix035.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix035_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix035_POWER_OPC/test.desc new file mode 100644 index 00000000000..72bafa9f602 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix035.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix035_POWER_OPT/mix035.c b/regression/goto-instrument-wmm-core/x86_mix035_POWER_OPT/mix035.c new file mode 100644 index 00000000000..663f82f9c87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_POWER_OPT/mix035.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix035_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix035_POWER_OPT/test.desc new file mode 100644 index 00000000000..3fd266c9f09 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix035.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix035_PSO_ALL/mix035.c b/regression/goto-instrument-wmm-core/x86_mix035_PSO_ALL/mix035.c new file mode 100644 index 00000000000..663f82f9c87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_PSO_ALL/mix035.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix035_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix035_PSO_ALL/test.desc new file mode 100644 index 00000000000..8441628f3fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix035.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix035_PSO_OPC/mix035.c b/regression/goto-instrument-wmm-core/x86_mix035_PSO_OPC/mix035.c new file mode 100644 index 00000000000..663f82f9c87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_PSO_OPC/mix035.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix035_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix035_PSO_OPC/test.desc new file mode 100644 index 00000000000..687ab51438d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix035.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix035_PSO_OPT/mix035.c b/regression/goto-instrument-wmm-core/x86_mix035_PSO_OPT/mix035.c new file mode 100644 index 00000000000..663f82f9c87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_PSO_OPT/mix035.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix035_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix035_PSO_OPT/test.desc new file mode 100644 index 00000000000..96ecf05902b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix035.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix035_RMO_ALL/mix035.c b/regression/goto-instrument-wmm-core/x86_mix035_RMO_ALL/mix035.c new file mode 100644 index 00000000000..663f82f9c87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_RMO_ALL/mix035.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix035_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix035_RMO_ALL/test.desc new file mode 100644 index 00000000000..1bbf0646a94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix035.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix035_RMO_OPC/mix035.c b/regression/goto-instrument-wmm-core/x86_mix035_RMO_OPC/mix035.c new file mode 100644 index 00000000000..663f82f9c87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_RMO_OPC/mix035.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix035_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix035_RMO_OPC/test.desc new file mode 100644 index 00000000000..42992bf6e57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix035.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix035_RMO_OPT/mix035.c b/regression/goto-instrument-wmm-core/x86_mix035_RMO_OPT/mix035.c new file mode 100644 index 00000000000..663f82f9c87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_RMO_OPT/mix035.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix035_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix035_RMO_OPT/test.desc new file mode 100644 index 00000000000..9c3d1463bf0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix035.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix035_SC_SAFE/mix035.c b/regression/goto-instrument-wmm-core/x86_mix035_SC_SAFE/mix035.c new file mode 100644 index 00000000000..663f82f9c87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_SC_SAFE/mix035.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix035_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix035_SC_SAFE/test.desc new file mode 100644 index 00000000000..34c4acb319e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix035.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix035_TSO_ALL/mix035.c b/regression/goto-instrument-wmm-core/x86_mix035_TSO_ALL/mix035.c new file mode 100644 index 00000000000..663f82f9c87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_TSO_ALL/mix035.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix035_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix035_TSO_ALL/test.desc new file mode 100644 index 00000000000..010c11537ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix035.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix035_TSO_OPC/mix035.c b/regression/goto-instrument-wmm-core/x86_mix035_TSO_OPC/mix035.c new file mode 100644 index 00000000000..663f82f9c87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_TSO_OPC/mix035.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix035_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix035_TSO_OPC/test.desc new file mode 100644 index 00000000000..9d7935459fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix035.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix035_TSO_OPT/mix035.c b/regression/goto-instrument-wmm-core/x86_mix035_TSO_OPT/mix035.c new file mode 100644 index 00000000000..663f82f9c87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_TSO_OPT/mix035.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix035_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix035_TSO_OPT/test.desc new file mode 100644 index 00000000000..0671d33c6d8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix035_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix035.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix036_CAV11_ERROR/mix036.c b/regression/goto-instrument-wmm-core/x86_mix036_CAV11_ERROR/mix036.c new file mode 100644 index 00000000000..81ecede413b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_CAV11_ERROR/mix036.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix036_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix036_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..e1325717d9a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix036.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix036_POWER_ALL/mix036.c b/regression/goto-instrument-wmm-core/x86_mix036_POWER_ALL/mix036.c new file mode 100644 index 00000000000..81ecede413b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_POWER_ALL/mix036.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix036_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix036_POWER_ALL/test.desc new file mode 100644 index 00000000000..25429ad3a6d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix036.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix036_POWER_OPC/mix036.c b/regression/goto-instrument-wmm-core/x86_mix036_POWER_OPC/mix036.c new file mode 100644 index 00000000000..81ecede413b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_POWER_OPC/mix036.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix036_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix036_POWER_OPC/test.desc new file mode 100644 index 00000000000..645375e0530 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix036.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix036_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix036_POWER_OPT/test.desc index 4e0907d5b7a..4a2d1d2ea9b 100644 --- a/regression/goto-instrument-wmm-core/x86_mix036_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix036_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix036.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix036_PSO_ALL/mix036.c b/regression/goto-instrument-wmm-core/x86_mix036_PSO_ALL/mix036.c new file mode 100644 index 00000000000..81ecede413b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_PSO_ALL/mix036.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix036_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix036_PSO_ALL/test.desc new file mode 100644 index 00000000000..b613d0e2569 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix036.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix036_PSO_OPC/mix036.c b/regression/goto-instrument-wmm-core/x86_mix036_PSO_OPC/mix036.c new file mode 100644 index 00000000000..81ecede413b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_PSO_OPC/mix036.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix036_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix036_PSO_OPC/test.desc new file mode 100644 index 00000000000..f9306bfd231 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix036.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix036_PSO_OPT/mix036.c b/regression/goto-instrument-wmm-core/x86_mix036_PSO_OPT/mix036.c new file mode 100644 index 00000000000..81ecede413b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_PSO_OPT/mix036.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix036_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix036_PSO_OPT/test.desc new file mode 100644 index 00000000000..04598307360 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix036.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix036_RMO_ALL/mix036.c b/regression/goto-instrument-wmm-core/x86_mix036_RMO_ALL/mix036.c new file mode 100644 index 00000000000..81ecede413b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_RMO_ALL/mix036.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix036_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix036_RMO_ALL/test.desc new file mode 100644 index 00000000000..50586ef1cf7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix036.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix036_RMO_OPC/mix036.c b/regression/goto-instrument-wmm-core/x86_mix036_RMO_OPC/mix036.c new file mode 100644 index 00000000000..81ecede413b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_RMO_OPC/mix036.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix036_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix036_RMO_OPC/test.desc new file mode 100644 index 00000000000..df2236edcce --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix036.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix036_RMO_OPT/mix036.c b/regression/goto-instrument-wmm-core/x86_mix036_RMO_OPT/mix036.c new file mode 100644 index 00000000000..81ecede413b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_RMO_OPT/mix036.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix036_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix036_RMO_OPT/test.desc new file mode 100644 index 00000000000..aeb5d856cbc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix036.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix036_SC_SAFE/mix036.c b/regression/goto-instrument-wmm-core/x86_mix036_SC_SAFE/mix036.c new file mode 100644 index 00000000000..81ecede413b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_SC_SAFE/mix036.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix036_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix036_SC_SAFE/test.desc new file mode 100644 index 00000000000..c65a105e27d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix036.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix036_TSO_ALL/mix036.c b/regression/goto-instrument-wmm-core/x86_mix036_TSO_ALL/mix036.c new file mode 100644 index 00000000000..81ecede413b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_TSO_ALL/mix036.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix036_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix036_TSO_ALL/test.desc new file mode 100644 index 00000000000..59e15e020a9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix036.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix036_TSO_OPC/mix036.c b/regression/goto-instrument-wmm-core/x86_mix036_TSO_OPC/mix036.c new file mode 100644 index 00000000000..81ecede413b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_TSO_OPC/mix036.c @@ -0,0 +1,83 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix036_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix036_TSO_OPC/test.desc new file mode 100644 index 00000000000..9a84810d1ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix036_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix036.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix036_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix036_TSO_OPT/test.desc index dad1a2c9266..7ae69288300 100644 --- a/regression/goto-instrument-wmm-core/x86_mix036_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix036_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix036.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix037_CAV11_ERROR/mix037.c b/regression/goto-instrument-wmm-core/x86_mix037_CAV11_ERROR/mix037.c new file mode 100644 index 00000000000..f008e0072d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_CAV11_ERROR/mix037.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix037_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix037_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..c40485d9c42 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix037.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix037_POWER_ALL/mix037.c b/regression/goto-instrument-wmm-core/x86_mix037_POWER_ALL/mix037.c new file mode 100644 index 00000000000..f008e0072d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_POWER_ALL/mix037.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix037_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix037_POWER_ALL/test.desc new file mode 100644 index 00000000000..568fc4ec1a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix037.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix037_POWER_OPC/mix037.c b/regression/goto-instrument-wmm-core/x86_mix037_POWER_OPC/mix037.c new file mode 100644 index 00000000000..f008e0072d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_POWER_OPC/mix037.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix037_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix037_POWER_OPC/test.desc new file mode 100644 index 00000000000..0c60e3dacba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix037.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix037_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix037_POWER_OPT/test.desc index df0ed485710..1a99ba4824f 100644 --- a/regression/goto-instrument-wmm-core/x86_mix037_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix037_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix037.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix037_PSO_ALL/mix037.c b/regression/goto-instrument-wmm-core/x86_mix037_PSO_ALL/mix037.c new file mode 100644 index 00000000000..f008e0072d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_PSO_ALL/mix037.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix037_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix037_PSO_ALL/test.desc new file mode 100644 index 00000000000..5853a9792e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix037.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix037_PSO_OPC/mix037.c b/regression/goto-instrument-wmm-core/x86_mix037_PSO_OPC/mix037.c new file mode 100644 index 00000000000..f008e0072d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_PSO_OPC/mix037.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix037_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix037_PSO_OPC/test.desc new file mode 100644 index 00000000000..36dd1bf99b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix037.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix037_PSO_OPT/mix037.c b/regression/goto-instrument-wmm-core/x86_mix037_PSO_OPT/mix037.c new file mode 100644 index 00000000000..f008e0072d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_PSO_OPT/mix037.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix037_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix037_PSO_OPT/test.desc new file mode 100644 index 00000000000..a8bcc490761 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix037.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix037_RMO_ALL/mix037.c b/regression/goto-instrument-wmm-core/x86_mix037_RMO_ALL/mix037.c new file mode 100644 index 00000000000..f008e0072d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_RMO_ALL/mix037.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix037_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix037_RMO_ALL/test.desc new file mode 100644 index 00000000000..570e9b624fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix037.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix037_RMO_OPC/mix037.c b/regression/goto-instrument-wmm-core/x86_mix037_RMO_OPC/mix037.c new file mode 100644 index 00000000000..f008e0072d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_RMO_OPC/mix037.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix037_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix037_RMO_OPC/test.desc new file mode 100644 index 00000000000..21ad10a7886 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix037.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix037_RMO_OPT/mix037.c b/regression/goto-instrument-wmm-core/x86_mix037_RMO_OPT/mix037.c new file mode 100644 index 00000000000..f008e0072d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_RMO_OPT/mix037.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix037_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix037_RMO_OPT/test.desc new file mode 100644 index 00000000000..7e8eef0131b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix037.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix037_SC_SAFE/mix037.c b/regression/goto-instrument-wmm-core/x86_mix037_SC_SAFE/mix037.c new file mode 100644 index 00000000000..f008e0072d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_SC_SAFE/mix037.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix037_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix037_SC_SAFE/test.desc new file mode 100644 index 00000000000..945758dc0ee --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix037.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix037_TSO_ALL/mix037.c b/regression/goto-instrument-wmm-core/x86_mix037_TSO_ALL/mix037.c new file mode 100644 index 00000000000..f008e0072d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_TSO_ALL/mix037.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix037_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix037_TSO_ALL/test.desc new file mode 100644 index 00000000000..80fa4c738e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix037.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix037_TSO_OPC/mix037.c b/regression/goto-instrument-wmm-core/x86_mix037_TSO_OPC/mix037.c new file mode 100644 index 00000000000..f008e0072d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_TSO_OPC/mix037.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix037_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix037_TSO_OPC/test.desc new file mode 100644 index 00000000000..2d024caaf05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix037_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix037.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix037_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix037_TSO_OPT/test.desc index 47b61eaa1ee..b9ac9b56157 100644 --- a/regression/goto-instrument-wmm-core/x86_mix037_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix037_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix037.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix038_CAV11_ERROR/mix038.c b/regression/goto-instrument-wmm-core/x86_mix038_CAV11_ERROR/mix038.c new file mode 100644 index 00000000000..361e25780bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_CAV11_ERROR/mix038.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix038_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix038_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..2e2c1fff574 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix038.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix038_POWER_ALL/mix038.c b/regression/goto-instrument-wmm-core/x86_mix038_POWER_ALL/mix038.c new file mode 100644 index 00000000000..361e25780bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_POWER_ALL/mix038.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix038_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix038_POWER_ALL/test.desc new file mode 100644 index 00000000000..f2805b2a96a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix038.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix038_POWER_OPC/mix038.c b/regression/goto-instrument-wmm-core/x86_mix038_POWER_OPC/mix038.c new file mode 100644 index 00000000000..361e25780bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_POWER_OPC/mix038.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix038_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix038_POWER_OPC/test.desc new file mode 100644 index 00000000000..38fe83762ac --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix038.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix038_POWER_OPT/mix038.c b/regression/goto-instrument-wmm-core/x86_mix038_POWER_OPT/mix038.c new file mode 100644 index 00000000000..361e25780bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_POWER_OPT/mix038.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix038_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix038_POWER_OPT/test.desc new file mode 100644 index 00000000000..50cbaa11007 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix038.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix038_PSO_ALL/mix038.c b/regression/goto-instrument-wmm-core/x86_mix038_PSO_ALL/mix038.c new file mode 100644 index 00000000000..361e25780bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_PSO_ALL/mix038.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix038_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix038_PSO_ALL/test.desc new file mode 100644 index 00000000000..d86891d61fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix038.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix038_PSO_OPC/mix038.c b/regression/goto-instrument-wmm-core/x86_mix038_PSO_OPC/mix038.c new file mode 100644 index 00000000000..361e25780bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_PSO_OPC/mix038.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix038_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix038_PSO_OPC/test.desc new file mode 100644 index 00000000000..f307551cf44 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix038.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix038_PSO_OPT/mix038.c b/regression/goto-instrument-wmm-core/x86_mix038_PSO_OPT/mix038.c new file mode 100644 index 00000000000..361e25780bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_PSO_OPT/mix038.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix038_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix038_PSO_OPT/test.desc new file mode 100644 index 00000000000..4c64c5f8a6f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix038.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix038_RMO_ALL/mix038.c b/regression/goto-instrument-wmm-core/x86_mix038_RMO_ALL/mix038.c new file mode 100644 index 00000000000..361e25780bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_RMO_ALL/mix038.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix038_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix038_RMO_ALL/test.desc new file mode 100644 index 00000000000..bc3d7ac428d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix038.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix038_RMO_OPC/mix038.c b/regression/goto-instrument-wmm-core/x86_mix038_RMO_OPC/mix038.c new file mode 100644 index 00000000000..361e25780bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_RMO_OPC/mix038.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix038_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix038_RMO_OPC/test.desc new file mode 100644 index 00000000000..7854eef76c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix038.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix038_RMO_OPT/mix038.c b/regression/goto-instrument-wmm-core/x86_mix038_RMO_OPT/mix038.c new file mode 100644 index 00000000000..361e25780bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_RMO_OPT/mix038.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix038_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix038_RMO_OPT/test.desc new file mode 100644 index 00000000000..da023a6f29c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix038.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix038_SC_SAFE/mix038.c b/regression/goto-instrument-wmm-core/x86_mix038_SC_SAFE/mix038.c new file mode 100644 index 00000000000..361e25780bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_SC_SAFE/mix038.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix038_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix038_SC_SAFE/test.desc new file mode 100644 index 00000000000..accf6aaff50 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix038.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix038_TSO_ALL/mix038.c b/regression/goto-instrument-wmm-core/x86_mix038_TSO_ALL/mix038.c new file mode 100644 index 00000000000..361e25780bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_TSO_ALL/mix038.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix038_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix038_TSO_ALL/test.desc new file mode 100644 index 00000000000..d2162c9a045 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix038.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix038_TSO_OPC/mix038.c b/regression/goto-instrument-wmm-core/x86_mix038_TSO_OPC/mix038.c new file mode 100644 index 00000000000..361e25780bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_TSO_OPC/mix038.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix038_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix038_TSO_OPC/test.desc new file mode 100644 index 00000000000..be62b8e209f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix038.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix038_TSO_OPT/mix038.c b/regression/goto-instrument-wmm-core/x86_mix038_TSO_OPT/mix038.c new file mode 100644 index 00000000000..361e25780bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_TSO_OPT/mix038.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix038_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix038_TSO_OPT/test.desc new file mode 100644 index 00000000000..b24fa3bd961 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix038_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix038.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix039_CAV11_ERROR/mix039.c b/regression/goto-instrument-wmm-core/x86_mix039_CAV11_ERROR/mix039.c new file mode 100644 index 00000000000..e0fc4583762 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_CAV11_ERROR/mix039.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix039_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix039_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..5c2f703bdad --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix039.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix039_POWER_ALL/mix039.c b/regression/goto-instrument-wmm-core/x86_mix039_POWER_ALL/mix039.c new file mode 100644 index 00000000000..e0fc4583762 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_POWER_ALL/mix039.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix039_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix039_POWER_ALL/test.desc new file mode 100644 index 00000000000..81179c1a947 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix039.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix039_POWER_OPC/mix039.c b/regression/goto-instrument-wmm-core/x86_mix039_POWER_OPC/mix039.c new file mode 100644 index 00000000000..e0fc4583762 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_POWER_OPC/mix039.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix039_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix039_POWER_OPC/test.desc new file mode 100644 index 00000000000..4c0766f1099 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix039.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix039_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix039_POWER_OPT/test.desc index 8ef8640272b..2992cbac033 100644 --- a/regression/goto-instrument-wmm-core/x86_mix039_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix039_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix039.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix039_PSO_ALL/mix039.c b/regression/goto-instrument-wmm-core/x86_mix039_PSO_ALL/mix039.c new file mode 100644 index 00000000000..e0fc4583762 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_PSO_ALL/mix039.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix039_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix039_PSO_ALL/test.desc new file mode 100644 index 00000000000..dd4e3ce331f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix039.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix039_PSO_OPC/mix039.c b/regression/goto-instrument-wmm-core/x86_mix039_PSO_OPC/mix039.c new file mode 100644 index 00000000000..e0fc4583762 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_PSO_OPC/mix039.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix039_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix039_PSO_OPC/test.desc new file mode 100644 index 00000000000..f3c3d7f4f9e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix039.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix039_PSO_OPT/mix039.c b/regression/goto-instrument-wmm-core/x86_mix039_PSO_OPT/mix039.c new file mode 100644 index 00000000000..e0fc4583762 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_PSO_OPT/mix039.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix039_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix039_PSO_OPT/test.desc new file mode 100644 index 00000000000..20f2823c3ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix039.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix039_RMO_ALL/mix039.c b/regression/goto-instrument-wmm-core/x86_mix039_RMO_ALL/mix039.c new file mode 100644 index 00000000000..e0fc4583762 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_RMO_ALL/mix039.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix039_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix039_RMO_ALL/test.desc new file mode 100644 index 00000000000..112797d3fc0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix039.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix039_RMO_OPC/mix039.c b/regression/goto-instrument-wmm-core/x86_mix039_RMO_OPC/mix039.c new file mode 100644 index 00000000000..e0fc4583762 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_RMO_OPC/mix039.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix039_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix039_RMO_OPC/test.desc new file mode 100644 index 00000000000..41593f293ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix039.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix039_RMO_OPT/mix039.c b/regression/goto-instrument-wmm-core/x86_mix039_RMO_OPT/mix039.c new file mode 100644 index 00000000000..e0fc4583762 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_RMO_OPT/mix039.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix039_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix039_RMO_OPT/test.desc new file mode 100644 index 00000000000..b8b507c1c41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix039.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix039_SC_SAFE/mix039.c b/regression/goto-instrument-wmm-core/x86_mix039_SC_SAFE/mix039.c new file mode 100644 index 00000000000..e0fc4583762 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_SC_SAFE/mix039.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix039_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix039_SC_SAFE/test.desc new file mode 100644 index 00000000000..bd4f8835190 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix039.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix039_TSO_ALL/mix039.c b/regression/goto-instrument-wmm-core/x86_mix039_TSO_ALL/mix039.c new file mode 100644 index 00000000000..e0fc4583762 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_TSO_ALL/mix039.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix039_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix039_TSO_ALL/test.desc new file mode 100644 index 00000000000..30d4adc9573 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix039.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix039_TSO_OPC/mix039.c b/regression/goto-instrument-wmm-core/x86_mix039_TSO_OPC/mix039.c new file mode 100644 index 00000000000..e0fc4583762 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_TSO_OPC/mix039.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix039_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix039_TSO_OPC/test.desc new file mode 100644 index 00000000000..ec23541f27e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix039_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix039.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix039_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix039_TSO_OPT/test.desc index 628f6f614fb..7b6204716a3 100644 --- a/regression/goto-instrument-wmm-core/x86_mix039_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix039_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix039.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix040_CAV11_ERROR/mix040.c b/regression/goto-instrument-wmm-core/x86_mix040_CAV11_ERROR/mix040.c new file mode 100644 index 00000000000..fe3d5cc5d70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_CAV11_ERROR/mix040.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix040_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix040_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..61f2210424c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix040.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix040_POWER_ALL/mix040.c b/regression/goto-instrument-wmm-core/x86_mix040_POWER_ALL/mix040.c new file mode 100644 index 00000000000..fe3d5cc5d70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_POWER_ALL/mix040.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix040_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix040_POWER_ALL/test.desc new file mode 100644 index 00000000000..547c9afe7fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix040.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix040_POWER_OPC/mix040.c b/regression/goto-instrument-wmm-core/x86_mix040_POWER_OPC/mix040.c new file mode 100644 index 00000000000..fe3d5cc5d70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_POWER_OPC/mix040.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix040_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix040_POWER_OPC/test.desc new file mode 100644 index 00000000000..eed5269a97e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix040.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix040_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix040_POWER_OPT/test.desc index 3616015b505..eadc9174a58 100644 --- a/regression/goto-instrument-wmm-core/x86_mix040_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix040_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix040.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix040_PSO_ALL/mix040.c b/regression/goto-instrument-wmm-core/x86_mix040_PSO_ALL/mix040.c new file mode 100644 index 00000000000..fe3d5cc5d70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_PSO_ALL/mix040.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix040_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix040_PSO_ALL/test.desc new file mode 100644 index 00000000000..3919427026f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix040.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix040_PSO_OPC/mix040.c b/regression/goto-instrument-wmm-core/x86_mix040_PSO_OPC/mix040.c new file mode 100644 index 00000000000..fe3d5cc5d70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_PSO_OPC/mix040.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix040_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix040_PSO_OPC/test.desc new file mode 100644 index 00000000000..38516095e26 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix040.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix040_PSO_OPT/mix040.c b/regression/goto-instrument-wmm-core/x86_mix040_PSO_OPT/mix040.c new file mode 100644 index 00000000000..fe3d5cc5d70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_PSO_OPT/mix040.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix040_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix040_PSO_OPT/test.desc new file mode 100644 index 00000000000..cafc7b77ee7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix040.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix040_RMO_ALL/mix040.c b/regression/goto-instrument-wmm-core/x86_mix040_RMO_ALL/mix040.c new file mode 100644 index 00000000000..fe3d5cc5d70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_RMO_ALL/mix040.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix040_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix040_RMO_ALL/test.desc new file mode 100644 index 00000000000..aaea4172e5b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix040.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix040_RMO_OPC/mix040.c b/regression/goto-instrument-wmm-core/x86_mix040_RMO_OPC/mix040.c new file mode 100644 index 00000000000..fe3d5cc5d70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_RMO_OPC/mix040.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix040_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix040_RMO_OPC/test.desc new file mode 100644 index 00000000000..3d2cf64e7ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix040.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix040_RMO_OPT/mix040.c b/regression/goto-instrument-wmm-core/x86_mix040_RMO_OPT/mix040.c new file mode 100644 index 00000000000..fe3d5cc5d70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_RMO_OPT/mix040.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix040_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix040_RMO_OPT/test.desc new file mode 100644 index 00000000000..d621d6e2a81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix040.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix040_SC_SAFE/mix040.c b/regression/goto-instrument-wmm-core/x86_mix040_SC_SAFE/mix040.c new file mode 100644 index 00000000000..fe3d5cc5d70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_SC_SAFE/mix040.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix040_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix040_SC_SAFE/test.desc new file mode 100644 index 00000000000..fa16ff7bf67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix040.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix040_TSO_ALL/mix040.c b/regression/goto-instrument-wmm-core/x86_mix040_TSO_ALL/mix040.c new file mode 100644 index 00000000000..fe3d5cc5d70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_TSO_ALL/mix040.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix040_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix040_TSO_ALL/test.desc new file mode 100644 index 00000000000..9c7273d4585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix040.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix040_TSO_OPC/mix040.c b/regression/goto-instrument-wmm-core/x86_mix040_TSO_OPC/mix040.c new file mode 100644 index 00000000000..fe3d5cc5d70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_TSO_OPC/mix040.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix040_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix040_TSO_OPC/test.desc new file mode 100644 index 00000000000..a124c280cce --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix040_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix040.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix040_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix040_TSO_OPT/test.desc index 5386e289f02..03ac55cd9b5 100644 --- a/regression/goto-instrument-wmm-core/x86_mix040_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix040_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix040.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix041_CAV11_ERROR/mix041.c b/regression/goto-instrument-wmm-core/x86_mix041_CAV11_ERROR/mix041.c new file mode 100644 index 00000000000..ffb44a789bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_CAV11_ERROR/mix041.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix041_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix041_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..528acfb8ae5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix041.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix041_POWER_ALL/mix041.c b/regression/goto-instrument-wmm-core/x86_mix041_POWER_ALL/mix041.c new file mode 100644 index 00000000000..ffb44a789bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_POWER_ALL/mix041.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix041_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix041_POWER_ALL/test.desc new file mode 100644 index 00000000000..f9033107eb4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix041.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix041_POWER_OPC/mix041.c b/regression/goto-instrument-wmm-core/x86_mix041_POWER_OPC/mix041.c new file mode 100644 index 00000000000..ffb44a789bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_POWER_OPC/mix041.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix041_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix041_POWER_OPC/test.desc new file mode 100644 index 00000000000..802ebca1f0d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix041.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix041_POWER_OPT/mix041.c b/regression/goto-instrument-wmm-core/x86_mix041_POWER_OPT/mix041.c new file mode 100644 index 00000000000..ffb44a789bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_POWER_OPT/mix041.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix041_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix041_POWER_OPT/test.desc new file mode 100644 index 00000000000..37432b2cb48 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix041.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix041_PSO_ALL/mix041.c b/regression/goto-instrument-wmm-core/x86_mix041_PSO_ALL/mix041.c new file mode 100644 index 00000000000..ffb44a789bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_PSO_ALL/mix041.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix041_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix041_PSO_ALL/test.desc new file mode 100644 index 00000000000..06d720378d6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix041.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix041_PSO_OPC/mix041.c b/regression/goto-instrument-wmm-core/x86_mix041_PSO_OPC/mix041.c new file mode 100644 index 00000000000..ffb44a789bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_PSO_OPC/mix041.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix041_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix041_PSO_OPC/test.desc new file mode 100644 index 00000000000..55011db1cf9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix041.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix041_PSO_OPT/mix041.c b/regression/goto-instrument-wmm-core/x86_mix041_PSO_OPT/mix041.c new file mode 100644 index 00000000000..ffb44a789bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_PSO_OPT/mix041.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix041_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix041_PSO_OPT/test.desc new file mode 100644 index 00000000000..b167d60afee --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix041.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix041_RMO_ALL/mix041.c b/regression/goto-instrument-wmm-core/x86_mix041_RMO_ALL/mix041.c new file mode 100644 index 00000000000..ffb44a789bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_RMO_ALL/mix041.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix041_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix041_RMO_ALL/test.desc new file mode 100644 index 00000000000..ceb1d62b8e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix041.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix041_RMO_OPC/mix041.c b/regression/goto-instrument-wmm-core/x86_mix041_RMO_OPC/mix041.c new file mode 100644 index 00000000000..ffb44a789bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_RMO_OPC/mix041.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix041_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix041_RMO_OPC/test.desc new file mode 100644 index 00000000000..14c013abaa1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix041.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix041_RMO_OPT/mix041.c b/regression/goto-instrument-wmm-core/x86_mix041_RMO_OPT/mix041.c new file mode 100644 index 00000000000..ffb44a789bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_RMO_OPT/mix041.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix041_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix041_RMO_OPT/test.desc new file mode 100644 index 00000000000..d60de4104ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix041.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix041_SC_SAFE/mix041.c b/regression/goto-instrument-wmm-core/x86_mix041_SC_SAFE/mix041.c new file mode 100644 index 00000000000..ffb44a789bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_SC_SAFE/mix041.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix041_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix041_SC_SAFE/test.desc new file mode 100644 index 00000000000..046ea4220db --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix041.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix041_TSO_ALL/mix041.c b/regression/goto-instrument-wmm-core/x86_mix041_TSO_ALL/mix041.c new file mode 100644 index 00000000000..ffb44a789bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_TSO_ALL/mix041.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix041_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix041_TSO_ALL/test.desc new file mode 100644 index 00000000000..e1f9fa368e5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix041.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix041_TSO_OPC/mix041.c b/regression/goto-instrument-wmm-core/x86_mix041_TSO_OPC/mix041.c new file mode 100644 index 00000000000..ffb44a789bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_TSO_OPC/mix041.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix041_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix041_TSO_OPC/test.desc new file mode 100644 index 00000000000..afcb44f4365 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix041.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix041_TSO_OPT/mix041.c b/regression/goto-instrument-wmm-core/x86_mix041_TSO_OPT/mix041.c new file mode 100644 index 00000000000..ffb44a789bc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_TSO_OPT/mix041.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix041_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix041_TSO_OPT/test.desc new file mode 100644 index 00000000000..d5f47a60cc5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix041_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix041.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix042_CAV11_ERROR/mix042.c b/regression/goto-instrument-wmm-core/x86_mix042_CAV11_ERROR/mix042.c new file mode 100644 index 00000000000..7ea1de241c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_CAV11_ERROR/mix042.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix042_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix042_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..2afd83811af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix042.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix042_POWER_ALL/mix042.c b/regression/goto-instrument-wmm-core/x86_mix042_POWER_ALL/mix042.c new file mode 100644 index 00000000000..7ea1de241c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_POWER_ALL/mix042.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix042_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix042_POWER_ALL/test.desc new file mode 100644 index 00000000000..c05c18d0aea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix042.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix042_POWER_OPC/mix042.c b/regression/goto-instrument-wmm-core/x86_mix042_POWER_OPC/mix042.c new file mode 100644 index 00000000000..7ea1de241c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_POWER_OPC/mix042.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix042_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix042_POWER_OPC/test.desc new file mode 100644 index 00000000000..d712d6a656b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix042.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix042_POWER_OPT/mix042.c b/regression/goto-instrument-wmm-core/x86_mix042_POWER_OPT/mix042.c new file mode 100644 index 00000000000..7ea1de241c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_POWER_OPT/mix042.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix042_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix042_POWER_OPT/test.desc new file mode 100644 index 00000000000..68b5647813f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix042.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix042_PSO_ALL/mix042.c b/regression/goto-instrument-wmm-core/x86_mix042_PSO_ALL/mix042.c new file mode 100644 index 00000000000..7ea1de241c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_PSO_ALL/mix042.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix042_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix042_PSO_ALL/test.desc new file mode 100644 index 00000000000..9e98bb3dc3e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix042.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix042_PSO_OPC/mix042.c b/regression/goto-instrument-wmm-core/x86_mix042_PSO_OPC/mix042.c new file mode 100644 index 00000000000..7ea1de241c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_PSO_OPC/mix042.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix042_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix042_PSO_OPC/test.desc new file mode 100644 index 00000000000..3c45d226048 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix042.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix042_PSO_OPT/mix042.c b/regression/goto-instrument-wmm-core/x86_mix042_PSO_OPT/mix042.c new file mode 100644 index 00000000000..7ea1de241c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_PSO_OPT/mix042.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix042_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix042_PSO_OPT/test.desc new file mode 100644 index 00000000000..1383533df5e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix042.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix042_RMO_ALL/mix042.c b/regression/goto-instrument-wmm-core/x86_mix042_RMO_ALL/mix042.c new file mode 100644 index 00000000000..7ea1de241c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_RMO_ALL/mix042.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix042_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix042_RMO_ALL/test.desc new file mode 100644 index 00000000000..3b8b10d9646 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix042.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix042_RMO_OPC/mix042.c b/regression/goto-instrument-wmm-core/x86_mix042_RMO_OPC/mix042.c new file mode 100644 index 00000000000..7ea1de241c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_RMO_OPC/mix042.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix042_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix042_RMO_OPC/test.desc new file mode 100644 index 00000000000..1355fd13772 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix042.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix042_RMO_OPT/mix042.c b/regression/goto-instrument-wmm-core/x86_mix042_RMO_OPT/mix042.c new file mode 100644 index 00000000000..7ea1de241c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_RMO_OPT/mix042.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix042_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix042_RMO_OPT/test.desc new file mode 100644 index 00000000000..2738199de30 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix042.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix042_SC_SAFE/mix042.c b/regression/goto-instrument-wmm-core/x86_mix042_SC_SAFE/mix042.c new file mode 100644 index 00000000000..7ea1de241c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_SC_SAFE/mix042.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix042_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix042_SC_SAFE/test.desc new file mode 100644 index 00000000000..a50be0cbebe --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix042.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix042_TSO_ALL/mix042.c b/regression/goto-instrument-wmm-core/x86_mix042_TSO_ALL/mix042.c new file mode 100644 index 00000000000..7ea1de241c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_TSO_ALL/mix042.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix042_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix042_TSO_ALL/test.desc new file mode 100644 index 00000000000..69fc115760a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix042.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix042_TSO_OPC/mix042.c b/regression/goto-instrument-wmm-core/x86_mix042_TSO_OPC/mix042.c new file mode 100644 index 00000000000..7ea1de241c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_TSO_OPC/mix042.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix042_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix042_TSO_OPC/test.desc new file mode 100644 index 00000000000..f665adf0618 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix042.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix042_TSO_OPT/mix042.c b/regression/goto-instrument-wmm-core/x86_mix042_TSO_OPT/mix042.c new file mode 100644 index 00000000000..7ea1de241c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_TSO_OPT/mix042.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix042_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix042_TSO_OPT/test.desc new file mode 100644 index 00000000000..15cd577261f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix042_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix042.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix043_CAV11_ERROR/mix043.c b/regression/goto-instrument-wmm-core/x86_mix043_CAV11_ERROR/mix043.c new file mode 100644 index 00000000000..2a169c82e10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_CAV11_ERROR/mix043.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix043_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix043_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..808f9521756 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix043.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix043_POWER_ALL/mix043.c b/regression/goto-instrument-wmm-core/x86_mix043_POWER_ALL/mix043.c new file mode 100644 index 00000000000..2a169c82e10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_POWER_ALL/mix043.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix043_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix043_POWER_ALL/test.desc new file mode 100644 index 00000000000..2ec9143b2b6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix043.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix043_POWER_OPC/mix043.c b/regression/goto-instrument-wmm-core/x86_mix043_POWER_OPC/mix043.c new file mode 100644 index 00000000000..2a169c82e10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_POWER_OPC/mix043.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix043_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix043_POWER_OPC/test.desc new file mode 100644 index 00000000000..a6a9a971569 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix043.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix043_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix043_POWER_OPT/test.desc index bf2f2ca3bad..62760a4df9b 100644 --- a/regression/goto-instrument-wmm-core/x86_mix043_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix043_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix043.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix043_PSO_ALL/mix043.c b/regression/goto-instrument-wmm-core/x86_mix043_PSO_ALL/mix043.c new file mode 100644 index 00000000000..2a169c82e10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_PSO_ALL/mix043.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix043_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix043_PSO_ALL/test.desc new file mode 100644 index 00000000000..659a08f4b9e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix043.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix043_PSO_OPC/mix043.c b/regression/goto-instrument-wmm-core/x86_mix043_PSO_OPC/mix043.c new file mode 100644 index 00000000000..2a169c82e10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_PSO_OPC/mix043.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix043_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix043_PSO_OPC/test.desc new file mode 100644 index 00000000000..f49173915d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix043.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix043_PSO_OPT/mix043.c b/regression/goto-instrument-wmm-core/x86_mix043_PSO_OPT/mix043.c new file mode 100644 index 00000000000..2a169c82e10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_PSO_OPT/mix043.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix043_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix043_PSO_OPT/test.desc new file mode 100644 index 00000000000..dd8d63eb6ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix043.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix043_RMO_ALL/mix043.c b/regression/goto-instrument-wmm-core/x86_mix043_RMO_ALL/mix043.c new file mode 100644 index 00000000000..2a169c82e10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_RMO_ALL/mix043.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix043_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix043_RMO_ALL/test.desc new file mode 100644 index 00000000000..ea68bd24399 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix043.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix043_RMO_OPC/mix043.c b/regression/goto-instrument-wmm-core/x86_mix043_RMO_OPC/mix043.c new file mode 100644 index 00000000000..2a169c82e10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_RMO_OPC/mix043.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix043_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix043_RMO_OPC/test.desc new file mode 100644 index 00000000000..5518492a09e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix043.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix043_RMO_OPT/mix043.c b/regression/goto-instrument-wmm-core/x86_mix043_RMO_OPT/mix043.c new file mode 100644 index 00000000000..2a169c82e10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_RMO_OPT/mix043.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix043_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix043_RMO_OPT/test.desc new file mode 100644 index 00000000000..99968bbf7a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix043.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix043_SC_SAFE/mix043.c b/regression/goto-instrument-wmm-core/x86_mix043_SC_SAFE/mix043.c new file mode 100644 index 00000000000..2a169c82e10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_SC_SAFE/mix043.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix043_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix043_SC_SAFE/test.desc new file mode 100644 index 00000000000..1d55ccd1763 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix043.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix043_TSO_ALL/mix043.c b/regression/goto-instrument-wmm-core/x86_mix043_TSO_ALL/mix043.c new file mode 100644 index 00000000000..2a169c82e10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_TSO_ALL/mix043.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix043_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix043_TSO_ALL/test.desc new file mode 100644 index 00000000000..d0ac416568f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix043.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix043_TSO_OPC/mix043.c b/regression/goto-instrument-wmm-core/x86_mix043_TSO_OPC/mix043.c new file mode 100644 index 00000000000..2a169c82e10 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_TSO_OPC/mix043.c @@ -0,0 +1,81 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix043_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix043_TSO_OPC/test.desc new file mode 100644 index 00000000000..3939b194be8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix043_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix043.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix043_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix043_TSO_OPT/test.desc index 44edde8167f..a113dc8b66f 100644 --- a/regression/goto-instrument-wmm-core/x86_mix043_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix043_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix043.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix044_CAV11_ERROR/mix044.c b/regression/goto-instrument-wmm-core/x86_mix044_CAV11_ERROR/mix044.c new file mode 100644 index 00000000000..ffd480f859b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_CAV11_ERROR/mix044.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix044_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix044_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..423c7f4d64a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix044.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix044_POWER_ALL/mix044.c b/regression/goto-instrument-wmm-core/x86_mix044_POWER_ALL/mix044.c new file mode 100644 index 00000000000..ffd480f859b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_POWER_ALL/mix044.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix044_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix044_POWER_ALL/test.desc new file mode 100644 index 00000000000..7f5029d9083 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix044.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix044_POWER_OPC/mix044.c b/regression/goto-instrument-wmm-core/x86_mix044_POWER_OPC/mix044.c new file mode 100644 index 00000000000..ffd480f859b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_POWER_OPC/mix044.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix044_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix044_POWER_OPC/test.desc new file mode 100644 index 00000000000..69bb12814de --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix044.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix044_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix044_POWER_OPT/test.desc index c4d734bcb56..b140d2172df 100644 --- a/regression/goto-instrument-wmm-core/x86_mix044_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix044_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix044.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix044_PSO_ALL/mix044.c b/regression/goto-instrument-wmm-core/x86_mix044_PSO_ALL/mix044.c new file mode 100644 index 00000000000..ffd480f859b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_PSO_ALL/mix044.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix044_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix044_PSO_ALL/test.desc new file mode 100644 index 00000000000..f211d277594 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix044.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix044_PSO_OPC/mix044.c b/regression/goto-instrument-wmm-core/x86_mix044_PSO_OPC/mix044.c new file mode 100644 index 00000000000..ffd480f859b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_PSO_OPC/mix044.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix044_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix044_PSO_OPC/test.desc new file mode 100644 index 00000000000..9817c62663d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix044.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix044_PSO_OPT/mix044.c b/regression/goto-instrument-wmm-core/x86_mix044_PSO_OPT/mix044.c new file mode 100644 index 00000000000..ffd480f859b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_PSO_OPT/mix044.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix044_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix044_PSO_OPT/test.desc new file mode 100644 index 00000000000..0a1fe1a08d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix044.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix044_RMO_ALL/mix044.c b/regression/goto-instrument-wmm-core/x86_mix044_RMO_ALL/mix044.c new file mode 100644 index 00000000000..ffd480f859b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_RMO_ALL/mix044.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix044_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix044_RMO_ALL/test.desc new file mode 100644 index 00000000000..aeb83dc8e6f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix044.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix044_RMO_OPC/mix044.c b/regression/goto-instrument-wmm-core/x86_mix044_RMO_OPC/mix044.c new file mode 100644 index 00000000000..ffd480f859b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_RMO_OPC/mix044.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix044_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix044_RMO_OPC/test.desc new file mode 100644 index 00000000000..c7aa39f2a75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix044.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix044_RMO_OPT/mix044.c b/regression/goto-instrument-wmm-core/x86_mix044_RMO_OPT/mix044.c new file mode 100644 index 00000000000..ffd480f859b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_RMO_OPT/mix044.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix044_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix044_RMO_OPT/test.desc new file mode 100644 index 00000000000..aa04d8d7518 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix044.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix044_SC_SAFE/mix044.c b/regression/goto-instrument-wmm-core/x86_mix044_SC_SAFE/mix044.c new file mode 100644 index 00000000000..ffd480f859b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_SC_SAFE/mix044.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix044_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix044_SC_SAFE/test.desc new file mode 100644 index 00000000000..7de54a3fa1f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix044.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix044_TSO_ALL/mix044.c b/regression/goto-instrument-wmm-core/x86_mix044_TSO_ALL/mix044.c new file mode 100644 index 00000000000..ffd480f859b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_TSO_ALL/mix044.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix044_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix044_TSO_ALL/test.desc new file mode 100644 index 00000000000..158696444cc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix044.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix044_TSO_OPC/mix044.c b/regression/goto-instrument-wmm-core/x86_mix044_TSO_OPC/mix044.c new file mode 100644 index 00000000000..ffd480f859b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_TSO_OPC/mix044.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix044_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix044_TSO_OPC/test.desc new file mode 100644 index 00000000000..b02a718a1fb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix044_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix044.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix044_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix044_TSO_OPT/test.desc index 61a46afaf88..56f8af595f9 100644 --- a/regression/goto-instrument-wmm-core/x86_mix044_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix044_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix044.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix045_CAV11_ERROR/mix045.c b/regression/goto-instrument-wmm-core/x86_mix045_CAV11_ERROR/mix045.c new file mode 100644 index 00000000000..3753872e69f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_CAV11_ERROR/mix045.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix045_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix045_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..7de59f43389 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix045.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix045_POWER_ALL/mix045.c b/regression/goto-instrument-wmm-core/x86_mix045_POWER_ALL/mix045.c new file mode 100644 index 00000000000..3753872e69f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_POWER_ALL/mix045.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix045_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix045_POWER_ALL/test.desc new file mode 100644 index 00000000000..21fcd1e50bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix045.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix045_POWER_OPC/mix045.c b/regression/goto-instrument-wmm-core/x86_mix045_POWER_OPC/mix045.c new file mode 100644 index 00000000000..3753872e69f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_POWER_OPC/mix045.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix045_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix045_POWER_OPC/test.desc new file mode 100644 index 00000000000..8af04c84794 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix045.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix045_POWER_OPT/mix045.c b/regression/goto-instrument-wmm-core/x86_mix045_POWER_OPT/mix045.c new file mode 100644 index 00000000000..3753872e69f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_POWER_OPT/mix045.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix045_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix045_POWER_OPT/test.desc new file mode 100644 index 00000000000..1d626cb5576 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix045.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix045_PSO_ALL/mix045.c b/regression/goto-instrument-wmm-core/x86_mix045_PSO_ALL/mix045.c new file mode 100644 index 00000000000..3753872e69f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_PSO_ALL/mix045.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix045_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix045_PSO_ALL/test.desc new file mode 100644 index 00000000000..b6e59b2cce4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix045.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix045_PSO_OPC/mix045.c b/regression/goto-instrument-wmm-core/x86_mix045_PSO_OPC/mix045.c new file mode 100644 index 00000000000..3753872e69f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_PSO_OPC/mix045.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix045_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix045_PSO_OPC/test.desc new file mode 100644 index 00000000000..37e1758456a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix045.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix045_PSO_OPT/mix045.c b/regression/goto-instrument-wmm-core/x86_mix045_PSO_OPT/mix045.c new file mode 100644 index 00000000000..3753872e69f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_PSO_OPT/mix045.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix045_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix045_PSO_OPT/test.desc new file mode 100644 index 00000000000..7ab6e4068f9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix045.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix045_RMO_ALL/mix045.c b/regression/goto-instrument-wmm-core/x86_mix045_RMO_ALL/mix045.c new file mode 100644 index 00000000000..3753872e69f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_RMO_ALL/mix045.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix045_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix045_RMO_ALL/test.desc new file mode 100644 index 00000000000..1c019788d2d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix045.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix045_RMO_OPC/mix045.c b/regression/goto-instrument-wmm-core/x86_mix045_RMO_OPC/mix045.c new file mode 100644 index 00000000000..3753872e69f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_RMO_OPC/mix045.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix045_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix045_RMO_OPC/test.desc new file mode 100644 index 00000000000..b1fec136940 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix045.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix045_RMO_OPT/mix045.c b/regression/goto-instrument-wmm-core/x86_mix045_RMO_OPT/mix045.c new file mode 100644 index 00000000000..3753872e69f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_RMO_OPT/mix045.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix045_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix045_RMO_OPT/test.desc new file mode 100644 index 00000000000..e7a706eb46b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix045.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix045_SC_SAFE/mix045.c b/regression/goto-instrument-wmm-core/x86_mix045_SC_SAFE/mix045.c new file mode 100644 index 00000000000..3753872e69f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_SC_SAFE/mix045.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix045_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix045_SC_SAFE/test.desc new file mode 100644 index 00000000000..34820334090 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix045.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix045_TSO_ALL/mix045.c b/regression/goto-instrument-wmm-core/x86_mix045_TSO_ALL/mix045.c new file mode 100644 index 00000000000..3753872e69f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_TSO_ALL/mix045.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix045_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix045_TSO_ALL/test.desc new file mode 100644 index 00000000000..38648d720b1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix045.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix045_TSO_OPC/mix045.c b/regression/goto-instrument-wmm-core/x86_mix045_TSO_OPC/mix045.c new file mode 100644 index 00000000000..3753872e69f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_TSO_OPC/mix045.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix045_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix045_TSO_OPC/test.desc new file mode 100644 index 00000000000..9c2fd11a5ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix045.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix045_TSO_OPT/mix045.c b/regression/goto-instrument-wmm-core/x86_mix045_TSO_OPT/mix045.c new file mode 100644 index 00000000000..3753872e69f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_TSO_OPT/mix045.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p2_EAX = z; + __unbuffered_p2_EBX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix045_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix045_TSO_OPT/test.desc new file mode 100644 index 00000000000..498e910d5b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix045_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix045.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix046_CAV11_ERROR/mix046.c b/regression/goto-instrument-wmm-core/x86_mix046_CAV11_ERROR/mix046.c new file mode 100644 index 00000000000..a119dc0cff9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_CAV11_ERROR/mix046.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix046_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix046_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..5a1ccc78ae3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix046.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix046_POWER_ALL/mix046.c b/regression/goto-instrument-wmm-core/x86_mix046_POWER_ALL/mix046.c new file mode 100644 index 00000000000..a119dc0cff9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_POWER_ALL/mix046.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix046_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix046_POWER_ALL/test.desc new file mode 100644 index 00000000000..8574a1db491 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix046.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix046_POWER_OPC/mix046.c b/regression/goto-instrument-wmm-core/x86_mix046_POWER_OPC/mix046.c new file mode 100644 index 00000000000..a119dc0cff9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_POWER_OPC/mix046.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix046_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix046_POWER_OPC/test.desc new file mode 100644 index 00000000000..b948a6d69f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix046.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix046_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix046_POWER_OPT/test.desc index f6e8bda37ea..2ff7ef6f065 100644 --- a/regression/goto-instrument-wmm-core/x86_mix046_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix046_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix046.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix046_PSO_ALL/mix046.c b/regression/goto-instrument-wmm-core/x86_mix046_PSO_ALL/mix046.c new file mode 100644 index 00000000000..a119dc0cff9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_PSO_ALL/mix046.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix046_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix046_PSO_ALL/test.desc new file mode 100644 index 00000000000..409d6574267 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix046.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix046_PSO_OPC/mix046.c b/regression/goto-instrument-wmm-core/x86_mix046_PSO_OPC/mix046.c new file mode 100644 index 00000000000..a119dc0cff9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_PSO_OPC/mix046.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix046_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix046_PSO_OPC/test.desc new file mode 100644 index 00000000000..020b5ececfd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix046.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix046_PSO_OPT/mix046.c b/regression/goto-instrument-wmm-core/x86_mix046_PSO_OPT/mix046.c new file mode 100644 index 00000000000..a119dc0cff9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_PSO_OPT/mix046.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix046_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix046_PSO_OPT/test.desc new file mode 100644 index 00000000000..907c634ed6b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix046.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix046_RMO_ALL/mix046.c b/regression/goto-instrument-wmm-core/x86_mix046_RMO_ALL/mix046.c new file mode 100644 index 00000000000..a119dc0cff9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_RMO_ALL/mix046.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix046_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix046_RMO_ALL/test.desc new file mode 100644 index 00000000000..2c91d27047b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +mix046.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix046_RMO_OPC/mix046.c b/regression/goto-instrument-wmm-core/x86_mix046_RMO_OPC/mix046.c new file mode 100644 index 00000000000..a119dc0cff9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_RMO_OPC/mix046.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix046_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix046_RMO_OPC/test.desc new file mode 100644 index 00000000000..9c1e73af456 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix046.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix046_RMO_OPT/mix046.c b/regression/goto-instrument-wmm-core/x86_mix046_RMO_OPT/mix046.c new file mode 100644 index 00000000000..a119dc0cff9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_RMO_OPT/mix046.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix046_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix046_RMO_OPT/test.desc new file mode 100644 index 00000000000..d8aba520510 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix046.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix046_SC_SAFE/mix046.c b/regression/goto-instrument-wmm-core/x86_mix046_SC_SAFE/mix046.c new file mode 100644 index 00000000000..a119dc0cff9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_SC_SAFE/mix046.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix046_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix046_SC_SAFE/test.desc new file mode 100644 index 00000000000..83a68f5661d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix046.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix046_TSO_ALL/mix046.c b/regression/goto-instrument-wmm-core/x86_mix046_TSO_ALL/mix046.c new file mode 100644 index 00000000000..a119dc0cff9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_TSO_ALL/mix046.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix046_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix046_TSO_ALL/test.desc new file mode 100644 index 00000000000..e882aed8ff6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix046.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix046_TSO_OPC/mix046.c b/regression/goto-instrument-wmm-core/x86_mix046_TSO_OPC/mix046.c new file mode 100644 index 00000000000..a119dc0cff9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_TSO_OPC/mix046.c @@ -0,0 +1,80 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0 && + __unbuffered_p3_EAX == 1 && __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix046_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix046_TSO_OPC/test.desc new file mode 100644 index 00000000000..022c4960e0c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix046_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix046.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix046_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix046_TSO_OPT/test.desc index 88bac31b357..3f49b459ec3 100644 --- a/regression/goto-instrument-wmm-core/x86_mix046_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix046_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix046.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix047_CAV11_ERROR/mix047.c b/regression/goto-instrument-wmm-core/x86_mix047_CAV11_ERROR/mix047.c new file mode 100644 index 00000000000..d86374c8fda --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_CAV11_ERROR/mix047.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix047_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix047_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..ef05b0e2b5a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix047.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix047_POWER_ALL/mix047.c b/regression/goto-instrument-wmm-core/x86_mix047_POWER_ALL/mix047.c new file mode 100644 index 00000000000..d86374c8fda --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_POWER_ALL/mix047.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix047_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix047_POWER_ALL/test.desc new file mode 100644 index 00000000000..3c69a58fcbd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix047.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix047_POWER_OPC/mix047.c b/regression/goto-instrument-wmm-core/x86_mix047_POWER_OPC/mix047.c new file mode 100644 index 00000000000..d86374c8fda --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_POWER_OPC/mix047.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix047_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix047_POWER_OPC/test.desc new file mode 100644 index 00000000000..bb1ba07c82a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix047.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix047_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix047_POWER_OPT/test.desc index 10e9913e551..d86e280694b 100644 --- a/regression/goto-instrument-wmm-core/x86_mix047_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix047_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix047.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix047_PSO_ALL/mix047.c b/regression/goto-instrument-wmm-core/x86_mix047_PSO_ALL/mix047.c new file mode 100644 index 00000000000..d86374c8fda --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_PSO_ALL/mix047.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix047_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix047_PSO_ALL/test.desc new file mode 100644 index 00000000000..20a21531626 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix047.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix047_PSO_OPC/mix047.c b/regression/goto-instrument-wmm-core/x86_mix047_PSO_OPC/mix047.c new file mode 100644 index 00000000000..d86374c8fda --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_PSO_OPC/mix047.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix047_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix047_PSO_OPC/test.desc new file mode 100644 index 00000000000..ad3590e29d3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix047.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix047_PSO_OPT/mix047.c b/regression/goto-instrument-wmm-core/x86_mix047_PSO_OPT/mix047.c new file mode 100644 index 00000000000..d86374c8fda --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_PSO_OPT/mix047.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix047_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix047_PSO_OPT/test.desc new file mode 100644 index 00000000000..c9b629c8045 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix047.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix047_RMO_ALL/mix047.c b/regression/goto-instrument-wmm-core/x86_mix047_RMO_ALL/mix047.c new file mode 100644 index 00000000000..d86374c8fda --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_RMO_ALL/mix047.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix047_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix047_RMO_ALL/test.desc new file mode 100644 index 00000000000..cf7784ed252 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix047.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix047_RMO_OPC/mix047.c b/regression/goto-instrument-wmm-core/x86_mix047_RMO_OPC/mix047.c new file mode 100644 index 00000000000..d86374c8fda --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_RMO_OPC/mix047.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix047_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix047_RMO_OPC/test.desc new file mode 100644 index 00000000000..d6ab377339b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix047.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix047_RMO_OPT/mix047.c b/regression/goto-instrument-wmm-core/x86_mix047_RMO_OPT/mix047.c new file mode 100644 index 00000000000..d86374c8fda --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_RMO_OPT/mix047.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix047_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix047_RMO_OPT/test.desc new file mode 100644 index 00000000000..a6d6b2a740b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix047.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix047_SC_SAFE/mix047.c b/regression/goto-instrument-wmm-core/x86_mix047_SC_SAFE/mix047.c new file mode 100644 index 00000000000..d86374c8fda --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_SC_SAFE/mix047.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix047_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix047_SC_SAFE/test.desc new file mode 100644 index 00000000000..fba3ff1699b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix047.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix047_TSO_ALL/mix047.c b/regression/goto-instrument-wmm-core/x86_mix047_TSO_ALL/mix047.c new file mode 100644 index 00000000000..d86374c8fda --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_TSO_ALL/mix047.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix047_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix047_TSO_ALL/test.desc new file mode 100644 index 00000000000..d2a319da54d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix047.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix047_TSO_OPC/mix047.c b/regression/goto-instrument-wmm-core/x86_mix047_TSO_OPC/mix047.c new file mode 100644 index 00000000000..d86374c8fda --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_TSO_OPC/mix047.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int __unbuffered_p3_EBX = 0; +int a = 0; +int b = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + b = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + a = 1; + __unbuffered_p3_EAX = a; + __unbuffered_p3_EBX = b; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 1 && + __unbuffered_p3_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix047_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix047_TSO_OPC/test.desc new file mode 100644 index 00000000000..0901322c840 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix047_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix047.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix047_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix047_TSO_OPT/test.desc index 8d4f05ac09b..c2e47980f45 100644 --- a/regression/goto-instrument-wmm-core/x86_mix047_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix047_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix047.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix048_CAV11_ERROR/mix048.c b/regression/goto-instrument-wmm-core/x86_mix048_CAV11_ERROR/mix048.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_CAV11_ERROR/mix048.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix048_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix048_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..857fa960b79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix048.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix048_POWER_ALL/mix048.c b/regression/goto-instrument-wmm-core/x86_mix048_POWER_ALL/mix048.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_POWER_ALL/mix048.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix048_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix048_POWER_ALL/test.desc new file mode 100644 index 00000000000..008dceb6393 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix048.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix048_POWER_OPC/mix048.c b/regression/goto-instrument-wmm-core/x86_mix048_POWER_OPC/mix048.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_POWER_OPC/mix048.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix048_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix048_POWER_OPC/test.desc new file mode 100644 index 00000000000..42a7bb19088 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix048.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix048_POWER_OPT/mix048.c b/regression/goto-instrument-wmm-core/x86_mix048_POWER_OPT/mix048.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_POWER_OPT/mix048.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix048_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix048_POWER_OPT/test.desc new file mode 100644 index 00000000000..710fe506629 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix048.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix048_PSO_ALL/mix048.c b/regression/goto-instrument-wmm-core/x86_mix048_PSO_ALL/mix048.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_PSO_ALL/mix048.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix048_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix048_PSO_ALL/test.desc new file mode 100644 index 00000000000..feca1d40942 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix048.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix048_PSO_OPC/mix048.c b/regression/goto-instrument-wmm-core/x86_mix048_PSO_OPC/mix048.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_PSO_OPC/mix048.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix048_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix048_PSO_OPC/test.desc new file mode 100644 index 00000000000..ef9b2984e78 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix048.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix048_PSO_OPT/mix048.c b/regression/goto-instrument-wmm-core/x86_mix048_PSO_OPT/mix048.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_PSO_OPT/mix048.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix048_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix048_PSO_OPT/test.desc new file mode 100644 index 00000000000..4220e126409 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix048.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix048_RMO_ALL/mix048.c b/regression/goto-instrument-wmm-core/x86_mix048_RMO_ALL/mix048.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_RMO_ALL/mix048.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix048_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix048_RMO_ALL/test.desc new file mode 100644 index 00000000000..e0e84490b53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix048.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix048_RMO_OPC/mix048.c b/regression/goto-instrument-wmm-core/x86_mix048_RMO_OPC/mix048.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_RMO_OPC/mix048.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix048_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix048_RMO_OPC/test.desc new file mode 100644 index 00000000000..98559f95d73 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix048.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix048_RMO_OPT/mix048.c b/regression/goto-instrument-wmm-core/x86_mix048_RMO_OPT/mix048.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_RMO_OPT/mix048.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix048_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix048_RMO_OPT/test.desc new file mode 100644 index 00000000000..63d6d2f2615 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix048.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix048_SC_SAFE/mix048.c b/regression/goto-instrument-wmm-core/x86_mix048_SC_SAFE/mix048.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_SC_SAFE/mix048.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix048_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix048_SC_SAFE/test.desc new file mode 100644 index 00000000000..71ef703a679 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix048.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix048_TSO_ALL/mix048.c b/regression/goto-instrument-wmm-core/x86_mix048_TSO_ALL/mix048.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_TSO_ALL/mix048.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix048_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix048_TSO_ALL/test.desc new file mode 100644 index 00000000000..da8772332ab --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix048.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix048_TSO_OPC/mix048.c b/regression/goto-instrument-wmm-core/x86_mix048_TSO_OPC/mix048.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_TSO_OPC/mix048.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix048_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix048_TSO_OPC/test.desc new file mode 100644 index 00000000000..e2aef27a093 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix048.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix048_TSO_OPT/mix048.c b/regression/goto-instrument-wmm-core/x86_mix048_TSO_OPT/mix048.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_TSO_OPT/mix048.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix048_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix048_TSO_OPT/test.desc new file mode 100644 index 00000000000..4899dd7d624 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix048_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix048.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix049_CAV11_ERROR/mix049.c b/regression/goto-instrument-wmm-core/x86_mix049_CAV11_ERROR/mix049.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_CAV11_ERROR/mix049.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix049_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix049_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..fac53b31aad --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix049.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix049_POWER_ALL/mix049.c b/regression/goto-instrument-wmm-core/x86_mix049_POWER_ALL/mix049.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_POWER_ALL/mix049.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix049_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix049_POWER_ALL/test.desc new file mode 100644 index 00000000000..cc9722d37b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix049.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix049_POWER_OPC/mix049.c b/regression/goto-instrument-wmm-core/x86_mix049_POWER_OPC/mix049.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_POWER_OPC/mix049.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix049_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix049_POWER_OPC/test.desc new file mode 100644 index 00000000000..f1f2fabad8c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix049.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix049_POWER_OPT/mix049.c b/regression/goto-instrument-wmm-core/x86_mix049_POWER_OPT/mix049.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_POWER_OPT/mix049.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix049_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix049_POWER_OPT/test.desc new file mode 100644 index 00000000000..cd0ce6465e5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix049.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix049_PSO_ALL/mix049.c b/regression/goto-instrument-wmm-core/x86_mix049_PSO_ALL/mix049.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_PSO_ALL/mix049.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix049_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix049_PSO_ALL/test.desc new file mode 100644 index 00000000000..15686de642f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix049.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix049_PSO_OPC/mix049.c b/regression/goto-instrument-wmm-core/x86_mix049_PSO_OPC/mix049.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_PSO_OPC/mix049.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix049_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix049_PSO_OPC/test.desc new file mode 100644 index 00000000000..9e21388ee79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix049.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix049_PSO_OPT/mix049.c b/regression/goto-instrument-wmm-core/x86_mix049_PSO_OPT/mix049.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_PSO_OPT/mix049.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix049_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix049_PSO_OPT/test.desc new file mode 100644 index 00000000000..de9bb4c1017 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix049.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix049_RMO_ALL/mix049.c b/regression/goto-instrument-wmm-core/x86_mix049_RMO_ALL/mix049.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_RMO_ALL/mix049.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix049_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix049_RMO_ALL/test.desc new file mode 100644 index 00000000000..e20b30614fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix049.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix049_RMO_OPC/mix049.c b/regression/goto-instrument-wmm-core/x86_mix049_RMO_OPC/mix049.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_RMO_OPC/mix049.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix049_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix049_RMO_OPC/test.desc new file mode 100644 index 00000000000..bdd5e4b47cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix049.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix049_RMO_OPT/mix049.c b/regression/goto-instrument-wmm-core/x86_mix049_RMO_OPT/mix049.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_RMO_OPT/mix049.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix049_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix049_RMO_OPT/test.desc new file mode 100644 index 00000000000..8153e72f9ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix049.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix049_SC_SAFE/mix049.c b/regression/goto-instrument-wmm-core/x86_mix049_SC_SAFE/mix049.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_SC_SAFE/mix049.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix049_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix049_SC_SAFE/test.desc new file mode 100644 index 00000000000..fd270a9d5b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix049.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix049_TSO_ALL/mix049.c b/regression/goto-instrument-wmm-core/x86_mix049_TSO_ALL/mix049.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_TSO_ALL/mix049.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix049_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix049_TSO_ALL/test.desc new file mode 100644 index 00000000000..4f3b5c69e45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix049.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix049_TSO_OPC/mix049.c b/regression/goto-instrument-wmm-core/x86_mix049_TSO_OPC/mix049.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_TSO_OPC/mix049.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix049_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix049_TSO_OPC/test.desc new file mode 100644 index 00000000000..c31897dd8f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix049.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix049_TSO_OPT/mix049.c b/regression/goto-instrument-wmm-core/x86_mix049_TSO_OPT/mix049.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_TSO_OPT/mix049.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix049_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix049_TSO_OPT/test.desc new file mode 100644 index 00000000000..6fc0f25ff89 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix049_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix049.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix050_CAV11_ERROR/mix050.c b/regression/goto-instrument-wmm-core/x86_mix050_CAV11_ERROR/mix050.c new file mode 100644 index 00000000000..1af879986af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_CAV11_ERROR/mix050.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix050_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix050_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..c43da1d9c49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix050.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix050_POWER_ALL/mix050.c b/regression/goto-instrument-wmm-core/x86_mix050_POWER_ALL/mix050.c new file mode 100644 index 00000000000..1af879986af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_POWER_ALL/mix050.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix050_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix050_POWER_ALL/test.desc new file mode 100644 index 00000000000..164faab860c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix050.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix050_POWER_OPC/mix050.c b/regression/goto-instrument-wmm-core/x86_mix050_POWER_OPC/mix050.c new file mode 100644 index 00000000000..1af879986af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_POWER_OPC/mix050.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix050_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix050_POWER_OPC/test.desc new file mode 100644 index 00000000000..f66909523ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix050.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix050_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix050_POWER_OPT/test.desc index 859ca484914..b87de62a6cb 100644 --- a/regression/goto-instrument-wmm-core/x86_mix050_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix050_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix050.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix050_PSO_ALL/mix050.c b/regression/goto-instrument-wmm-core/x86_mix050_PSO_ALL/mix050.c new file mode 100644 index 00000000000..1af879986af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_PSO_ALL/mix050.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix050_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix050_PSO_ALL/test.desc new file mode 100644 index 00000000000..f7c29a08032 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix050.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix050_PSO_OPC/mix050.c b/regression/goto-instrument-wmm-core/x86_mix050_PSO_OPC/mix050.c new file mode 100644 index 00000000000..1af879986af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_PSO_OPC/mix050.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix050_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix050_PSO_OPC/test.desc new file mode 100644 index 00000000000..00055ea3289 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix050.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix050_PSO_OPT/mix050.c b/regression/goto-instrument-wmm-core/x86_mix050_PSO_OPT/mix050.c new file mode 100644 index 00000000000..1af879986af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_PSO_OPT/mix050.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix050_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix050_PSO_OPT/test.desc new file mode 100644 index 00000000000..a77fff050ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix050.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix050_RMO_ALL/mix050.c b/regression/goto-instrument-wmm-core/x86_mix050_RMO_ALL/mix050.c new file mode 100644 index 00000000000..1af879986af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_RMO_ALL/mix050.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix050_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix050_RMO_ALL/test.desc new file mode 100644 index 00000000000..ee234b99563 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix050.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix050_RMO_OPC/mix050.c b/regression/goto-instrument-wmm-core/x86_mix050_RMO_OPC/mix050.c new file mode 100644 index 00000000000..1af879986af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_RMO_OPC/mix050.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix050_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix050_RMO_OPC/test.desc new file mode 100644 index 00000000000..8abcbae1210 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix050.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix050_RMO_OPT/mix050.c b/regression/goto-instrument-wmm-core/x86_mix050_RMO_OPT/mix050.c new file mode 100644 index 00000000000..1af879986af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_RMO_OPT/mix050.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix050_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix050_RMO_OPT/test.desc new file mode 100644 index 00000000000..d8264fa8a52 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix050.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix050_SC_SAFE/mix050.c b/regression/goto-instrument-wmm-core/x86_mix050_SC_SAFE/mix050.c new file mode 100644 index 00000000000..1af879986af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_SC_SAFE/mix050.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix050_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix050_SC_SAFE/test.desc new file mode 100644 index 00000000000..3eb169043ad --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix050.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix050_TSO_ALL/mix050.c b/regression/goto-instrument-wmm-core/x86_mix050_TSO_ALL/mix050.c new file mode 100644 index 00000000000..1af879986af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_TSO_ALL/mix050.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix050_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix050_TSO_ALL/test.desc new file mode 100644 index 00000000000..c5a3c9afd20 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix050.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix050_TSO_OPC/mix050.c b/regression/goto-instrument-wmm-core/x86_mix050_TSO_OPC/mix050.c new file mode 100644 index 00000000000..1af879986af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_TSO_OPC/mix050.c @@ -0,0 +1,78 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix050_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix050_TSO_OPC/test.desc new file mode 100644 index 00000000000..4ccfbd10bc2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix050_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix050.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix050_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix050_TSO_OPT/test.desc index f4da3048caa..fb06dd1a183 100644 --- a/regression/goto-instrument-wmm-core/x86_mix050_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix050_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix050.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix051_CAV11_ERROR/mix051.c b/regression/goto-instrument-wmm-core/x86_mix051_CAV11_ERROR/mix051.c new file mode 100644 index 00000000000..6dcd8787e85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_CAV11_ERROR/mix051.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix051_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix051_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..5b49af0ab99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix051.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix051_POWER_ALL/mix051.c b/regression/goto-instrument-wmm-core/x86_mix051_POWER_ALL/mix051.c new file mode 100644 index 00000000000..6dcd8787e85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_POWER_ALL/mix051.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix051_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix051_POWER_ALL/test.desc new file mode 100644 index 00000000000..8ef52eb7804 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix051.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix051_POWER_OPC/mix051.c b/regression/goto-instrument-wmm-core/x86_mix051_POWER_OPC/mix051.c new file mode 100644 index 00000000000..6dcd8787e85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_POWER_OPC/mix051.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix051_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix051_POWER_OPC/test.desc new file mode 100644 index 00000000000..9d6621ffaaa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix051.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix051_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix051_POWER_OPT/test.desc index 9a98c3bfd8a..0b288bc1134 100644 --- a/regression/goto-instrument-wmm-core/x86_mix051_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix051_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix051.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix051_PSO_ALL/mix051.c b/regression/goto-instrument-wmm-core/x86_mix051_PSO_ALL/mix051.c new file mode 100644 index 00000000000..6dcd8787e85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_PSO_ALL/mix051.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix051_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix051_PSO_ALL/test.desc new file mode 100644 index 00000000000..1ffc6d42e1c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix051.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix051_PSO_OPC/mix051.c b/regression/goto-instrument-wmm-core/x86_mix051_PSO_OPC/mix051.c new file mode 100644 index 00000000000..6dcd8787e85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_PSO_OPC/mix051.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix051_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix051_PSO_OPC/test.desc new file mode 100644 index 00000000000..9b95746c58c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix051.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix051_PSO_OPT/mix051.c b/regression/goto-instrument-wmm-core/x86_mix051_PSO_OPT/mix051.c new file mode 100644 index 00000000000..6dcd8787e85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_PSO_OPT/mix051.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix051_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix051_PSO_OPT/test.desc new file mode 100644 index 00000000000..ad90966a0c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix051.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix051_RMO_ALL/mix051.c b/regression/goto-instrument-wmm-core/x86_mix051_RMO_ALL/mix051.c new file mode 100644 index 00000000000..6dcd8787e85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_RMO_ALL/mix051.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix051_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix051_RMO_ALL/test.desc new file mode 100644 index 00000000000..9a7c4510abb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix051.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix051_RMO_OPC/mix051.c b/regression/goto-instrument-wmm-core/x86_mix051_RMO_OPC/mix051.c new file mode 100644 index 00000000000..6dcd8787e85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_RMO_OPC/mix051.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix051_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix051_RMO_OPC/test.desc new file mode 100644 index 00000000000..16c34f529c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix051.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix051_RMO_OPT/mix051.c b/regression/goto-instrument-wmm-core/x86_mix051_RMO_OPT/mix051.c new file mode 100644 index 00000000000..6dcd8787e85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_RMO_OPT/mix051.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix051_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix051_RMO_OPT/test.desc new file mode 100644 index 00000000000..e67addb59bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix051.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix051_SC_SAFE/mix051.c b/regression/goto-instrument-wmm-core/x86_mix051_SC_SAFE/mix051.c new file mode 100644 index 00000000000..6dcd8787e85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_SC_SAFE/mix051.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix051_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix051_SC_SAFE/test.desc new file mode 100644 index 00000000000..d76312457e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix051.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix051_TSO_ALL/mix051.c b/regression/goto-instrument-wmm-core/x86_mix051_TSO_ALL/mix051.c new file mode 100644 index 00000000000..6dcd8787e85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_TSO_ALL/mix051.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix051_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix051_TSO_ALL/test.desc new file mode 100644 index 00000000000..6a27315516c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix051.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix051_TSO_OPC/mix051.c b/regression/goto-instrument-wmm-core/x86_mix051_TSO_OPC/mix051.c new file mode 100644 index 00000000000..6dcd8787e85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_TSO_OPC/mix051.c @@ -0,0 +1,77 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0 && + __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix051_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix051_TSO_OPC/test.desc new file mode 100644 index 00000000000..c13e1331079 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix051_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix051.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix051_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix051_TSO_OPT/test.desc index 711957889be..e54bd2a8ca4 100644 --- a/regression/goto-instrument-wmm-core/x86_mix051_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix051_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix051.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix052_CAV11_ERROR/mix052.c b/regression/goto-instrument-wmm-core/x86_mix052_CAV11_ERROR/mix052.c new file mode 100644 index 00000000000..8ca0123ef40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_CAV11_ERROR/mix052.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix052_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix052_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..e570f582225 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix052.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix052_POWER_ALL/mix052.c b/regression/goto-instrument-wmm-core/x86_mix052_POWER_ALL/mix052.c new file mode 100644 index 00000000000..8ca0123ef40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_POWER_ALL/mix052.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix052_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix052_POWER_ALL/test.desc new file mode 100644 index 00000000000..807339c55be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix052.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix052_POWER_OPC/mix052.c b/regression/goto-instrument-wmm-core/x86_mix052_POWER_OPC/mix052.c new file mode 100644 index 00000000000..8ca0123ef40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_POWER_OPC/mix052.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix052_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix052_POWER_OPC/test.desc new file mode 100644 index 00000000000..ea7432512a2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix052.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix052_POWER_OPT/mix052.c b/regression/goto-instrument-wmm-core/x86_mix052_POWER_OPT/mix052.c new file mode 100644 index 00000000000..8ca0123ef40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_POWER_OPT/mix052.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix052_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix052_POWER_OPT/test.desc new file mode 100644 index 00000000000..9e484aaecfd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix052.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix052_PSO_ALL/mix052.c b/regression/goto-instrument-wmm-core/x86_mix052_PSO_ALL/mix052.c new file mode 100644 index 00000000000..8ca0123ef40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_PSO_ALL/mix052.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix052_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix052_PSO_ALL/test.desc new file mode 100644 index 00000000000..885a02de9c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix052.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix052_PSO_OPC/mix052.c b/regression/goto-instrument-wmm-core/x86_mix052_PSO_OPC/mix052.c new file mode 100644 index 00000000000..8ca0123ef40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_PSO_OPC/mix052.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix052_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix052_PSO_OPC/test.desc new file mode 100644 index 00000000000..3d730653eb5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix052.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix052_PSO_OPT/mix052.c b/regression/goto-instrument-wmm-core/x86_mix052_PSO_OPT/mix052.c new file mode 100644 index 00000000000..8ca0123ef40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_PSO_OPT/mix052.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix052_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix052_PSO_OPT/test.desc new file mode 100644 index 00000000000..29c02d75dd1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix052.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix052_RMO_ALL/mix052.c b/regression/goto-instrument-wmm-core/x86_mix052_RMO_ALL/mix052.c new file mode 100644 index 00000000000..8ca0123ef40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_RMO_ALL/mix052.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix052_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix052_RMO_ALL/test.desc new file mode 100644 index 00000000000..5e409935a26 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix052.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix052_RMO_OPC/mix052.c b/regression/goto-instrument-wmm-core/x86_mix052_RMO_OPC/mix052.c new file mode 100644 index 00000000000..8ca0123ef40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_RMO_OPC/mix052.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix052_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix052_RMO_OPC/test.desc new file mode 100644 index 00000000000..dcf11a93212 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix052.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix052_RMO_OPT/mix052.c b/regression/goto-instrument-wmm-core/x86_mix052_RMO_OPT/mix052.c new file mode 100644 index 00000000000..8ca0123ef40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_RMO_OPT/mix052.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix052_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix052_RMO_OPT/test.desc new file mode 100644 index 00000000000..64a84796202 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix052.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix052_SC_SAFE/mix052.c b/regression/goto-instrument-wmm-core/x86_mix052_SC_SAFE/mix052.c new file mode 100644 index 00000000000..8ca0123ef40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_SC_SAFE/mix052.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix052_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix052_SC_SAFE/test.desc new file mode 100644 index 00000000000..40c01e7701d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix052.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix052_TSO_ALL/mix052.c b/regression/goto-instrument-wmm-core/x86_mix052_TSO_ALL/mix052.c new file mode 100644 index 00000000000..8ca0123ef40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_TSO_ALL/mix052.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix052_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix052_TSO_ALL/test.desc new file mode 100644 index 00000000000..3a425232958 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix052.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix052_TSO_OPC/mix052.c b/regression/goto-instrument-wmm-core/x86_mix052_TSO_OPC/mix052.c new file mode 100644 index 00000000000..8ca0123ef40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_TSO_OPC/mix052.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix052_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix052_TSO_OPC/test.desc new file mode 100644 index 00000000000..a212970f95d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix052.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix052_TSO_OPT/mix052.c b/regression/goto-instrument-wmm-core/x86_mix052_TSO_OPT/mix052.c new file mode 100644 index 00000000000..8ca0123ef40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_TSO_OPT/mix052.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix052_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix052_TSO_OPT/test.desc new file mode 100644 index 00000000000..f6f616d1d5c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix052_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix052.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix053_CAV11_ERROR/mix053.c b/regression/goto-instrument-wmm-core/x86_mix053_CAV11_ERROR/mix053.c new file mode 100644 index 00000000000..c0c098318fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_CAV11_ERROR/mix053.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix053_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix053_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..521f2bc081c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix053.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix053_POWER_ALL/mix053.c b/regression/goto-instrument-wmm-core/x86_mix053_POWER_ALL/mix053.c new file mode 100644 index 00000000000..c0c098318fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_POWER_ALL/mix053.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix053_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix053_POWER_ALL/test.desc new file mode 100644 index 00000000000..2ee580120b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix053.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix053_POWER_OPC/mix053.c b/regression/goto-instrument-wmm-core/x86_mix053_POWER_OPC/mix053.c new file mode 100644 index 00000000000..c0c098318fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_POWER_OPC/mix053.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix053_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix053_POWER_OPC/test.desc new file mode 100644 index 00000000000..d8330645f98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix053.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix053_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix053_POWER_OPT/test.desc index bb7c665dded..f27f96eef39 100644 --- a/regression/goto-instrument-wmm-core/x86_mix053_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix053_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix053.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix053_PSO_ALL/mix053.c b/regression/goto-instrument-wmm-core/x86_mix053_PSO_ALL/mix053.c new file mode 100644 index 00000000000..c0c098318fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_PSO_ALL/mix053.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix053_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix053_PSO_ALL/test.desc new file mode 100644 index 00000000000..fdffee44adf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix053.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix053_PSO_OPC/mix053.c b/regression/goto-instrument-wmm-core/x86_mix053_PSO_OPC/mix053.c new file mode 100644 index 00000000000..c0c098318fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_PSO_OPC/mix053.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix053_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix053_PSO_OPC/test.desc new file mode 100644 index 00000000000..b03c7bbc355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix053.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix053_PSO_OPT/mix053.c b/regression/goto-instrument-wmm-core/x86_mix053_PSO_OPT/mix053.c new file mode 100644 index 00000000000..c0c098318fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_PSO_OPT/mix053.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix053_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix053_PSO_OPT/test.desc new file mode 100644 index 00000000000..a907b255d3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix053.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix053_RMO_ALL/mix053.c b/regression/goto-instrument-wmm-core/x86_mix053_RMO_ALL/mix053.c new file mode 100644 index 00000000000..c0c098318fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_RMO_ALL/mix053.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix053_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix053_RMO_ALL/test.desc new file mode 100644 index 00000000000..fa4636d0ce0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix053.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix053_RMO_OPC/mix053.c b/regression/goto-instrument-wmm-core/x86_mix053_RMO_OPC/mix053.c new file mode 100644 index 00000000000..c0c098318fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_RMO_OPC/mix053.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix053_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix053_RMO_OPC/test.desc new file mode 100644 index 00000000000..ed4ffe42b49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix053.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix053_RMO_OPT/mix053.c b/regression/goto-instrument-wmm-core/x86_mix053_RMO_OPT/mix053.c new file mode 100644 index 00000000000..c0c098318fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_RMO_OPT/mix053.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix053_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix053_RMO_OPT/test.desc new file mode 100644 index 00000000000..0e0a2d382eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix053.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix053_SC_SAFE/mix053.c b/regression/goto-instrument-wmm-core/x86_mix053_SC_SAFE/mix053.c new file mode 100644 index 00000000000..c0c098318fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_SC_SAFE/mix053.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix053_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix053_SC_SAFE/test.desc new file mode 100644 index 00000000000..e2b6b737432 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix053.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix053_TSO_ALL/mix053.c b/regression/goto-instrument-wmm-core/x86_mix053_TSO_ALL/mix053.c new file mode 100644 index 00000000000..c0c098318fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_TSO_ALL/mix053.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix053_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix053_TSO_ALL/test.desc new file mode 100644 index 00000000000..d8a645c1a90 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix053.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix053_TSO_OPC/mix053.c b/regression/goto-instrument-wmm-core/x86_mix053_TSO_OPC/mix053.c new file mode 100644 index 00000000000..c0c098318fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_TSO_OPC/mix053.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 1; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix053_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix053_TSO_OPC/test.desc new file mode 100644 index 00000000000..9feb3d7a2ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix053_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix053.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix053_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix053_TSO_OPT/test.desc index aff2ec159fb..aba207732a1 100644 --- a/regression/goto-instrument-wmm-core/x86_mix053_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix053_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix053.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix054_CAV11_ERROR/mix054.c b/regression/goto-instrument-wmm-core/x86_mix054_CAV11_ERROR/mix054.c new file mode 100644 index 00000000000..20059ef3f1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_CAV11_ERROR/mix054.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix054_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix054_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..d0201130355 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix054.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix054_POWER_ALL/mix054.c b/regression/goto-instrument-wmm-core/x86_mix054_POWER_ALL/mix054.c new file mode 100644 index 00000000000..20059ef3f1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_POWER_ALL/mix054.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix054_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix054_POWER_ALL/test.desc new file mode 100644 index 00000000000..082d6b13159 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix054.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix054_POWER_OPC/mix054.c b/regression/goto-instrument-wmm-core/x86_mix054_POWER_OPC/mix054.c new file mode 100644 index 00000000000..20059ef3f1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_POWER_OPC/mix054.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix054_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix054_POWER_OPC/test.desc new file mode 100644 index 00000000000..2e04644c76c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix054.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix054_POWER_OPT/mix054.c b/regression/goto-instrument-wmm-core/x86_mix054_POWER_OPT/mix054.c new file mode 100644 index 00000000000..20059ef3f1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_POWER_OPT/mix054.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix054_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix054_POWER_OPT/test.desc new file mode 100644 index 00000000000..6c9f8472f72 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix054.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix054_PSO_ALL/mix054.c b/regression/goto-instrument-wmm-core/x86_mix054_PSO_ALL/mix054.c new file mode 100644 index 00000000000..20059ef3f1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_PSO_ALL/mix054.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix054_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix054_PSO_ALL/test.desc new file mode 100644 index 00000000000..ae9fb4e44de --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix054.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix054_PSO_OPC/mix054.c b/regression/goto-instrument-wmm-core/x86_mix054_PSO_OPC/mix054.c new file mode 100644 index 00000000000..20059ef3f1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_PSO_OPC/mix054.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix054_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix054_PSO_OPC/test.desc new file mode 100644 index 00000000000..1c1cba33226 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix054.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix054_PSO_OPT/mix054.c b/regression/goto-instrument-wmm-core/x86_mix054_PSO_OPT/mix054.c new file mode 100644 index 00000000000..20059ef3f1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_PSO_OPT/mix054.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix054_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix054_PSO_OPT/test.desc new file mode 100644 index 00000000000..87eab48aa42 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix054.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix054_RMO_ALL/mix054.c b/regression/goto-instrument-wmm-core/x86_mix054_RMO_ALL/mix054.c new file mode 100644 index 00000000000..20059ef3f1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_RMO_ALL/mix054.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix054_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix054_RMO_ALL/test.desc new file mode 100644 index 00000000000..a0ce043e9e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix054.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix054_RMO_OPC/mix054.c b/regression/goto-instrument-wmm-core/x86_mix054_RMO_OPC/mix054.c new file mode 100644 index 00000000000..20059ef3f1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_RMO_OPC/mix054.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix054_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix054_RMO_OPC/test.desc new file mode 100644 index 00000000000..43efd8a0a2d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix054.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix054_RMO_OPT/mix054.c b/regression/goto-instrument-wmm-core/x86_mix054_RMO_OPT/mix054.c new file mode 100644 index 00000000000..20059ef3f1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_RMO_OPT/mix054.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix054_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix054_RMO_OPT/test.desc new file mode 100644 index 00000000000..784fbbae8f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix054.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix054_SC_SAFE/mix054.c b/regression/goto-instrument-wmm-core/x86_mix054_SC_SAFE/mix054.c new file mode 100644 index 00000000000..20059ef3f1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_SC_SAFE/mix054.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix054_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix054_SC_SAFE/test.desc new file mode 100644 index 00000000000..e7fcfd4d09a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix054.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix054_TSO_ALL/mix054.c b/regression/goto-instrument-wmm-core/x86_mix054_TSO_ALL/mix054.c new file mode 100644 index 00000000000..20059ef3f1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_TSO_ALL/mix054.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix054_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix054_TSO_ALL/test.desc new file mode 100644 index 00000000000..aa347ac6846 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix054.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix054_TSO_OPC/mix054.c b/regression/goto-instrument-wmm-core/x86_mix054_TSO_OPC/mix054.c new file mode 100644 index 00000000000..20059ef3f1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_TSO_OPC/mix054.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix054_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix054_TSO_OPC/test.desc new file mode 100644 index 00000000000..14d20310195 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix054.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix054_TSO_OPT/mix054.c b/regression/goto-instrument-wmm-core/x86_mix054_TSO_OPT/mix054.c new file mode 100644 index 00000000000..20059ef3f1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_TSO_OPT/mix054.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix054_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix054_TSO_OPT/test.desc new file mode 100644 index 00000000000..c832b3031a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix054_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix054.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix055_CAV11_ERROR/mix055.c b/regression/goto-instrument-wmm-core/x86_mix055_CAV11_ERROR/mix055.c new file mode 100644 index 00000000000..47ac60f5d40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_CAV11_ERROR/mix055.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix055_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix055_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..90dde7ce644 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix055.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix055_POWER_ALL/mix055.c b/regression/goto-instrument-wmm-core/x86_mix055_POWER_ALL/mix055.c new file mode 100644 index 00000000000..47ac60f5d40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_POWER_ALL/mix055.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix055_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix055_POWER_ALL/test.desc new file mode 100644 index 00000000000..62353045993 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix055.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix055_POWER_OPC/mix055.c b/regression/goto-instrument-wmm-core/x86_mix055_POWER_OPC/mix055.c new file mode 100644 index 00000000000..47ac60f5d40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_POWER_OPC/mix055.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix055_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix055_POWER_OPC/test.desc new file mode 100644 index 00000000000..3b6d070be15 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix055.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix055_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix055_POWER_OPT/test.desc index 7416679121c..05467daf49d 100644 --- a/regression/goto-instrument-wmm-core/x86_mix055_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix055_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix055.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix055_PSO_ALL/mix055.c b/regression/goto-instrument-wmm-core/x86_mix055_PSO_ALL/mix055.c new file mode 100644 index 00000000000..47ac60f5d40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_PSO_ALL/mix055.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix055_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix055_PSO_ALL/test.desc new file mode 100644 index 00000000000..8e2a454bc3a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix055.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix055_PSO_OPC/mix055.c b/regression/goto-instrument-wmm-core/x86_mix055_PSO_OPC/mix055.c new file mode 100644 index 00000000000..47ac60f5d40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_PSO_OPC/mix055.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix055_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix055_PSO_OPC/test.desc new file mode 100644 index 00000000000..b841f0e8c48 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix055.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix055_PSO_OPT/mix055.c b/regression/goto-instrument-wmm-core/x86_mix055_PSO_OPT/mix055.c new file mode 100644 index 00000000000..47ac60f5d40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_PSO_OPT/mix055.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix055_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix055_PSO_OPT/test.desc new file mode 100644 index 00000000000..4517ac5aa92 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix055.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix055_RMO_ALL/mix055.c b/regression/goto-instrument-wmm-core/x86_mix055_RMO_ALL/mix055.c new file mode 100644 index 00000000000..47ac60f5d40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_RMO_ALL/mix055.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix055_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix055_RMO_ALL/test.desc new file mode 100644 index 00000000000..374d7a909fb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix055.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix055_RMO_OPC/mix055.c b/regression/goto-instrument-wmm-core/x86_mix055_RMO_OPC/mix055.c new file mode 100644 index 00000000000..47ac60f5d40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_RMO_OPC/mix055.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix055_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix055_RMO_OPC/test.desc new file mode 100644 index 00000000000..b8bb61493ab --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix055.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix055_RMO_OPT/mix055.c b/regression/goto-instrument-wmm-core/x86_mix055_RMO_OPT/mix055.c new file mode 100644 index 00000000000..47ac60f5d40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_RMO_OPT/mix055.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix055_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix055_RMO_OPT/test.desc new file mode 100644 index 00000000000..7f81e2f9221 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix055.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix055_SC_SAFE/mix055.c b/regression/goto-instrument-wmm-core/x86_mix055_SC_SAFE/mix055.c new file mode 100644 index 00000000000..47ac60f5d40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_SC_SAFE/mix055.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix055_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix055_SC_SAFE/test.desc new file mode 100644 index 00000000000..e2cab786164 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix055.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix055_TSO_ALL/mix055.c b/regression/goto-instrument-wmm-core/x86_mix055_TSO_ALL/mix055.c new file mode 100644 index 00000000000..47ac60f5d40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_TSO_ALL/mix055.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix055_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix055_TSO_ALL/test.desc new file mode 100644 index 00000000000..c01b91ee681 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix055.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix055_TSO_OPC/mix055.c b/regression/goto-instrument-wmm-core/x86_mix055_TSO_OPC/mix055.c new file mode 100644 index 00000000000..47ac60f5d40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_TSO_OPC/mix055.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p1_EAX == 0 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix055_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix055_TSO_OPC/test.desc new file mode 100644 index 00000000000..ab9ba085be4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix055_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix055.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix055_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix055_TSO_OPT/test.desc index bb064b23b63..28bcc1a5c17 100644 --- a/regression/goto-instrument-wmm-core/x86_mix055_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix055_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix055.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix056_CAV11_ERROR/mix056.c b/regression/goto-instrument-wmm-core/x86_mix056_CAV11_ERROR/mix056.c new file mode 100644 index 00000000000..03e979dd850 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_CAV11_ERROR/mix056.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix056_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix056_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..04a40e5c70f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix056.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix056_POWER_ALL/mix056.c b/regression/goto-instrument-wmm-core/x86_mix056_POWER_ALL/mix056.c new file mode 100644 index 00000000000..03e979dd850 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_POWER_ALL/mix056.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix056_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix056_POWER_ALL/test.desc new file mode 100644 index 00000000000..1e483945575 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix056.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix056_POWER_OPC/mix056.c b/regression/goto-instrument-wmm-core/x86_mix056_POWER_OPC/mix056.c new file mode 100644 index 00000000000..03e979dd850 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_POWER_OPC/mix056.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix056_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix056_POWER_OPC/test.desc new file mode 100644 index 00000000000..a11c35bed9f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix056.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix056_POWER_OPT/mix056.c b/regression/goto-instrument-wmm-core/x86_mix056_POWER_OPT/mix056.c new file mode 100644 index 00000000000..03e979dd850 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_POWER_OPT/mix056.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix056_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix056_POWER_OPT/test.desc new file mode 100644 index 00000000000..0acdd23b2df --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix056.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix056_PSO_ALL/mix056.c b/regression/goto-instrument-wmm-core/x86_mix056_PSO_ALL/mix056.c new file mode 100644 index 00000000000..03e979dd850 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_PSO_ALL/mix056.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix056_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix056_PSO_ALL/test.desc new file mode 100644 index 00000000000..5c249d0f0f3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix056.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix056_PSO_OPC/mix056.c b/regression/goto-instrument-wmm-core/x86_mix056_PSO_OPC/mix056.c new file mode 100644 index 00000000000..03e979dd850 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_PSO_OPC/mix056.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix056_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix056_PSO_OPC/test.desc new file mode 100644 index 00000000000..1a87cf0572d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix056.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix056_PSO_OPT/mix056.c b/regression/goto-instrument-wmm-core/x86_mix056_PSO_OPT/mix056.c new file mode 100644 index 00000000000..03e979dd850 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_PSO_OPT/mix056.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix056_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix056_PSO_OPT/test.desc new file mode 100644 index 00000000000..ecd1bb8fcad --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix056.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix056_RMO_ALL/mix056.c b/regression/goto-instrument-wmm-core/x86_mix056_RMO_ALL/mix056.c new file mode 100644 index 00000000000..03e979dd850 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_RMO_ALL/mix056.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix056_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix056_RMO_ALL/test.desc new file mode 100644 index 00000000000..052ee253c77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix056.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix056_RMO_OPC/mix056.c b/regression/goto-instrument-wmm-core/x86_mix056_RMO_OPC/mix056.c new file mode 100644 index 00000000000..03e979dd850 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_RMO_OPC/mix056.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix056_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix056_RMO_OPC/test.desc new file mode 100644 index 00000000000..83b00c24e4c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix056.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix056_RMO_OPT/mix056.c b/regression/goto-instrument-wmm-core/x86_mix056_RMO_OPT/mix056.c new file mode 100644 index 00000000000..03e979dd850 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_RMO_OPT/mix056.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix056_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix056_RMO_OPT/test.desc new file mode 100644 index 00000000000..0a06636bd2b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix056.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix056_SC_SAFE/mix056.c b/regression/goto-instrument-wmm-core/x86_mix056_SC_SAFE/mix056.c new file mode 100644 index 00000000000..03e979dd850 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_SC_SAFE/mix056.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix056_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix056_SC_SAFE/test.desc new file mode 100644 index 00000000000..3ef9d0b6ffe --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix056.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix056_TSO_ALL/mix056.c b/regression/goto-instrument-wmm-core/x86_mix056_TSO_ALL/mix056.c new file mode 100644 index 00000000000..03e979dd850 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_TSO_ALL/mix056.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix056_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix056_TSO_ALL/test.desc new file mode 100644 index 00000000000..8ebcd60f710 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix056.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix056_TSO_OPC/mix056.c b/regression/goto-instrument-wmm-core/x86_mix056_TSO_OPC/mix056.c new file mode 100644 index 00000000000..03e979dd850 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_TSO_OPC/mix056.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix056_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix056_TSO_OPC/test.desc new file mode 100644 index 00000000000..7ed81ca691c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix056.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix056_TSO_OPT/mix056.c b/regression/goto-instrument-wmm-core/x86_mix056_TSO_OPT/mix056.c new file mode 100644 index 00000000000..03e979dd850 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_TSO_OPT/mix056.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix056_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix056_TSO_OPT/test.desc new file mode 100644 index 00000000000..c69b65d45b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix056_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix056.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix057_CAV11_ERROR/mix057.c b/regression/goto-instrument-wmm-core/x86_mix057_CAV11_ERROR/mix057.c new file mode 100644 index 00000000000..9954470235d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_CAV11_ERROR/mix057.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix057_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_mix057_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..dd2e5859d81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix057.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix057_POWER_ALL/mix057.c b/regression/goto-instrument-wmm-core/x86_mix057_POWER_ALL/mix057.c new file mode 100644 index 00000000000..9954470235d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_POWER_ALL/mix057.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix057_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix057_POWER_ALL/test.desc new file mode 100644 index 00000000000..77c7be555cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix057.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix057_POWER_OPC/mix057.c b/regression/goto-instrument-wmm-core/x86_mix057_POWER_OPC/mix057.c new file mode 100644 index 00000000000..9954470235d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_POWER_OPC/mix057.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix057_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix057_POWER_OPC/test.desc new file mode 100644 index 00000000000..e2d7073233e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix057.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix057_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix057_POWER_OPT/test.desc index c72183aa9ef..5012f7a7e81 100644 --- a/regression/goto-instrument-wmm-core/x86_mix057_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix057_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix057.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_mix057_PSO_ALL/mix057.c b/regression/goto-instrument-wmm-core/x86_mix057_PSO_ALL/mix057.c new file mode 100644 index 00000000000..9954470235d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_PSO_ALL/mix057.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix057_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix057_PSO_ALL/test.desc new file mode 100644 index 00000000000..b10ab15231e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix057.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix057_PSO_OPC/mix057.c b/regression/goto-instrument-wmm-core/x86_mix057_PSO_OPC/mix057.c new file mode 100644 index 00000000000..9954470235d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_PSO_OPC/mix057.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix057_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix057_PSO_OPC/test.desc new file mode 100644 index 00000000000..237e05c5bef --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix057.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix057_PSO_OPT/mix057.c b/regression/goto-instrument-wmm-core/x86_mix057_PSO_OPT/mix057.c new file mode 100644 index 00000000000..9954470235d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_PSO_OPT/mix057.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix057_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix057_PSO_OPT/test.desc new file mode 100644 index 00000000000..580e5dfdc95 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix057.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix057_RMO_ALL/mix057.c b/regression/goto-instrument-wmm-core/x86_mix057_RMO_ALL/mix057.c new file mode 100644 index 00000000000..9954470235d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_RMO_ALL/mix057.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix057_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix057_RMO_ALL/test.desc new file mode 100644 index 00000000000..413133ba6ad --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix057.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix057_RMO_OPC/mix057.c b/regression/goto-instrument-wmm-core/x86_mix057_RMO_OPC/mix057.c new file mode 100644 index 00000000000..9954470235d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_RMO_OPC/mix057.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix057_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix057_RMO_OPC/test.desc new file mode 100644 index 00000000000..e23d8e1c3e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix057.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix057_RMO_OPT/mix057.c b/regression/goto-instrument-wmm-core/x86_mix057_RMO_OPT/mix057.c new file mode 100644 index 00000000000..9954470235d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_RMO_OPT/mix057.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix057_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix057_RMO_OPT/test.desc new file mode 100644 index 00000000000..ffb2c92d954 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +mix057.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix057_SC_SAFE/mix057.c b/regression/goto-instrument-wmm-core/x86_mix057_SC_SAFE/mix057.c new file mode 100644 index 00000000000..9954470235d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_SC_SAFE/mix057.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix057_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_mix057_SC_SAFE/test.desc new file mode 100644 index 00000000000..1a293303afd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix057.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix057_TSO_ALL/mix057.c b/regression/goto-instrument-wmm-core/x86_mix057_TSO_ALL/mix057.c new file mode 100644 index 00000000000..9954470235d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_TSO_ALL/mix057.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix057_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_mix057_TSO_ALL/test.desc new file mode 100644 index 00000000000..c07777a914b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix057.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix057_TSO_OPC/mix057.c b/regression/goto-instrument-wmm-core/x86_mix057_TSO_OPC/mix057.c new file mode 100644 index 00000000000..9954470235d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_TSO_OPC/mix057.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + a = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + z = 2; + __unbuffered_p3_EAX = a; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2 && __unbuffered_p3_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_mix057_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_mix057_TSO_OPC/test.desc new file mode 100644 index 00000000000..95838b150f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_mix057_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +mix057.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_mix057_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_mix057_TSO_OPT/test.desc index dcbe9799b49..544f9fc02a2 100644 --- a/regression/goto-instrument-wmm-core/x86_mix057_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_mix057_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk mix057.c TSO OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_CAV11_ERROR/podwr000.c b/regression/goto-instrument-wmm-core/x86_podwr000_CAV11_ERROR/podwr000.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_CAV11_ERROR/podwr000.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_podwr000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..6e2917af4e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_POWER_ALL/podwr000.c b/regression/goto-instrument-wmm-core/x86_podwr000_POWER_ALL/podwr000.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_POWER_ALL/podwr000.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_podwr000_POWER_ALL/test.desc new file mode 100644 index 00000000000..421473351ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_POWER_OPC/podwr000.c b/regression/goto-instrument-wmm-core/x86_podwr000_POWER_OPC/podwr000.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_POWER_OPC/podwr000.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_podwr000_POWER_OPC/test.desc new file mode 100644 index 00000000000..97ce6bfc272 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_POWER_OPT/podwr000.c b/regression/goto-instrument-wmm-core/x86_podwr000_POWER_OPT/podwr000.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_POWER_OPT/podwr000.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_podwr000_POWER_OPT/test.desc new file mode 100644 index 00000000000..cc87e5a74bd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podwr000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_PSO_ALL/podwr000.c b/regression/goto-instrument-wmm-core/x86_podwr000_PSO_ALL/podwr000.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_PSO_ALL/podwr000.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_podwr000_PSO_ALL/test.desc new file mode 100644 index 00000000000..48569ae5d06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_PSO_OPC/podwr000.c b/regression/goto-instrument-wmm-core/x86_podwr000_PSO_OPC/podwr000.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_PSO_OPC/podwr000.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_podwr000_PSO_OPC/test.desc new file mode 100644 index 00000000000..761beeaa1e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_PSO_OPT/podwr000.c b/regression/goto-instrument-wmm-core/x86_podwr000_PSO_OPT/podwr000.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_PSO_OPT/podwr000.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_podwr000_PSO_OPT/test.desc new file mode 100644 index 00000000000..f503ceb5af2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podwr000.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_RMO_ALL/podwr000.c b/regression/goto-instrument-wmm-core/x86_podwr000_RMO_ALL/podwr000.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_RMO_ALL/podwr000.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_podwr000_RMO_ALL/test.desc new file mode 100644 index 00000000000..314af57c53c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_RMO_OPC/podwr000.c b/regression/goto-instrument-wmm-core/x86_podwr000_RMO_OPC/podwr000.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_RMO_OPC/podwr000.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_podwr000_RMO_OPC/test.desc new file mode 100644 index 00000000000..6b2118f2c8e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_RMO_OPT/podwr000.c b/regression/goto-instrument-wmm-core/x86_podwr000_RMO_OPT/podwr000.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_RMO_OPT/podwr000.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_podwr000_RMO_OPT/test.desc new file mode 100644 index 00000000000..fb1ea8b980c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podwr000.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_SC_SAFE/podwr000.c b/regression/goto-instrument-wmm-core/x86_podwr000_SC_SAFE/podwr000.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_SC_SAFE/podwr000.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_podwr000_SC_SAFE/test.desc new file mode 100644 index 00000000000..9c47ff843cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_TSO_ALL/podwr000.c b/regression/goto-instrument-wmm-core/x86_podwr000_TSO_ALL/podwr000.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_TSO_ALL/podwr000.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_podwr000_TSO_ALL/test.desc new file mode 100644 index 00000000000..f49bd51d72d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_TSO_OPC/podwr000.c b/regression/goto-instrument-wmm-core/x86_podwr000_TSO_OPC/podwr000.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_TSO_OPC/podwr000.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_podwr000_TSO_OPC/test.desc new file mode 100644 index 00000000000..9f6827af1d1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr000.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_TSO_OPT/podwr000.c b/regression/goto-instrument-wmm-core/x86_podwr000_TSO_OPT/podwr000.c new file mode 100644 index 00000000000..ff4936ac13a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_TSO_OPT/podwr000.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_podwr000_TSO_OPT/test.desc new file mode 100644 index 00000000000..6c7700a1475 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podwr000.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_CAV11_ERROR/podwr001.c b/regression/goto-instrument-wmm-core/x86_podwr001_CAV11_ERROR/podwr001.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_CAV11_ERROR/podwr001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_podwr001_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..dcfe4c9c5cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_POWER_ALL/podwr001.c b/regression/goto-instrument-wmm-core/x86_podwr001_POWER_ALL/podwr001.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_POWER_ALL/podwr001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_podwr001_POWER_ALL/test.desc new file mode 100644 index 00000000000..69b9a30c6a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_POWER_OPC/podwr001.c b/regression/goto-instrument-wmm-core/x86_podwr001_POWER_OPC/podwr001.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_POWER_OPC/podwr001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_podwr001_POWER_OPC/test.desc new file mode 100644 index 00000000000..d43a2d6578d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_POWER_OPT/podwr001.c b/regression/goto-instrument-wmm-core/x86_podwr001_POWER_OPT/podwr001.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_POWER_OPT/podwr001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_podwr001_POWER_OPT/test.desc new file mode 100644 index 00000000000..d80fba0078b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podwr001.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_PSO_ALL/podwr001.c b/regression/goto-instrument-wmm-core/x86_podwr001_PSO_ALL/podwr001.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_PSO_ALL/podwr001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_podwr001_PSO_ALL/test.desc new file mode 100644 index 00000000000..758a65e7954 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_PSO_OPC/podwr001.c b/regression/goto-instrument-wmm-core/x86_podwr001_PSO_OPC/podwr001.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_PSO_OPC/podwr001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_podwr001_PSO_OPC/test.desc new file mode 100644 index 00000000000..8ffd68a9c54 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_PSO_OPT/podwr001.c b/regression/goto-instrument-wmm-core/x86_podwr001_PSO_OPT/podwr001.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_PSO_OPT/podwr001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_podwr001_PSO_OPT/test.desc new file mode 100644 index 00000000000..a2bdbaafbe3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podwr001.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_RMO_ALL/podwr001.c b/regression/goto-instrument-wmm-core/x86_podwr001_RMO_ALL/podwr001.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_RMO_ALL/podwr001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_podwr001_RMO_ALL/test.desc new file mode 100644 index 00000000000..ff8dba920f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_RMO_OPC/podwr001.c b/regression/goto-instrument-wmm-core/x86_podwr001_RMO_OPC/podwr001.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_RMO_OPC/podwr001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_podwr001_RMO_OPC/test.desc new file mode 100644 index 00000000000..bcb0ab7ab19 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_RMO_OPT/podwr001.c b/regression/goto-instrument-wmm-core/x86_podwr001_RMO_OPT/podwr001.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_RMO_OPT/podwr001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_podwr001_RMO_OPT/test.desc new file mode 100644 index 00000000000..0749acb53fe --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podwr001.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_SC_SAFE/podwr001.c b/regression/goto-instrument-wmm-core/x86_podwr001_SC_SAFE/podwr001.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_SC_SAFE/podwr001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_podwr001_SC_SAFE/test.desc new file mode 100644 index 00000000000..82566e39c24 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_TSO_ALL/podwr001.c b/regression/goto-instrument-wmm-core/x86_podwr001_TSO_ALL/podwr001.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_TSO_ALL/podwr001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_podwr001_TSO_ALL/test.desc new file mode 100644 index 00000000000..2c3ebd2c375 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_TSO_OPC/podwr001.c b/regression/goto-instrument-wmm-core/x86_podwr001_TSO_OPC/podwr001.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_TSO_OPC/podwr001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_podwr001_TSO_OPC/test.desc new file mode 100644 index 00000000000..45a44de05cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +podwr001.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_TSO_OPT/podwr001.c b/regression/goto-instrument-wmm-core/x86_podwr001_TSO_OPT/podwr001.c new file mode 100644 index 00000000000..3eee8781152 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_TSO_OPT/podwr001.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_podwr001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_podwr001_TSO_OPT/test.desc new file mode 100644 index 00000000000..5eeefd5d0b6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_podwr001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +podwr001.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_CAV11_ERROR/rfi000.c b/regression/goto-instrument-wmm-core/x86_rfi000_CAV11_ERROR/rfi000.c new file mode 100644 index 00000000000..54591084bd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_CAV11_ERROR/rfi000.c @@ -0,0 +1,53 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_rfi000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..75dc2580e8d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_POWER_ALL/rfi000.c b/regression/goto-instrument-wmm-core/x86_rfi000_POWER_ALL/rfi000.c new file mode 100644 index 00000000000..54591084bd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_POWER_ALL/rfi000.c @@ -0,0 +1,53 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi000_POWER_ALL/test.desc new file mode 100644 index 00000000000..fbb692179eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_POWER_OPC/rfi000.c b/regression/goto-instrument-wmm-core/x86_rfi000_POWER_OPC/rfi000.c new file mode 100644 index 00000000000..54591084bd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_POWER_OPC/rfi000.c @@ -0,0 +1,53 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi000_POWER_OPC/test.desc new file mode 100644 index 00000000000..922454c99a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_POWER_OPT/rfi000.c b/regression/goto-instrument-wmm-core/x86_rfi000_POWER_OPT/rfi000.c new file mode 100644 index 00000000000..54591084bd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_POWER_OPT/rfi000.c @@ -0,0 +1,53 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi000_POWER_OPT/test.desc new file mode 100644 index 00000000000..31d487e034c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_PSO_ALL/rfi000.c b/regression/goto-instrument-wmm-core/x86_rfi000_PSO_ALL/rfi000.c new file mode 100644 index 00000000000..54591084bd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_PSO_ALL/rfi000.c @@ -0,0 +1,53 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi000_PSO_ALL/test.desc new file mode 100644 index 00000000000..185f2e7d5cc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_PSO_OPC/rfi000.c b/regression/goto-instrument-wmm-core/x86_rfi000_PSO_OPC/rfi000.c new file mode 100644 index 00000000000..54591084bd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_PSO_OPC/rfi000.c @@ -0,0 +1,53 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi000_PSO_OPC/test.desc new file mode 100644 index 00000000000..9a119158132 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_PSO_OPT/rfi000.c b/regression/goto-instrument-wmm-core/x86_rfi000_PSO_OPT/rfi000.c new file mode 100644 index 00000000000..54591084bd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_PSO_OPT/rfi000.c @@ -0,0 +1,53 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi000_PSO_OPT/test.desc new file mode 100644 index 00000000000..bff79517654 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi000.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_RMO_ALL/rfi000.c b/regression/goto-instrument-wmm-core/x86_rfi000_RMO_ALL/rfi000.c new file mode 100644 index 00000000000..54591084bd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_RMO_ALL/rfi000.c @@ -0,0 +1,53 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi000_RMO_ALL/test.desc new file mode 100644 index 00000000000..908e4d00fb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_RMO_OPC/rfi000.c b/regression/goto-instrument-wmm-core/x86_rfi000_RMO_OPC/rfi000.c new file mode 100644 index 00000000000..54591084bd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_RMO_OPC/rfi000.c @@ -0,0 +1,53 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi000_RMO_OPC/test.desc new file mode 100644 index 00000000000..9f676702d0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_RMO_OPT/rfi000.c b/regression/goto-instrument-wmm-core/x86_rfi000_RMO_OPT/rfi000.c new file mode 100644 index 00000000000..54591084bd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_RMO_OPT/rfi000.c @@ -0,0 +1,53 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi000_RMO_OPT/test.desc new file mode 100644 index 00000000000..0c009d7a955 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi000.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_SC_SAFE/rfi000.c b/regression/goto-instrument-wmm-core/x86_rfi000_SC_SAFE/rfi000.c new file mode 100644 index 00000000000..54591084bd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_SC_SAFE/rfi000.c @@ -0,0 +1,53 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_rfi000_SC_SAFE/test.desc new file mode 100644 index 00000000000..8893106493b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_TSO_ALL/rfi000.c b/regression/goto-instrument-wmm-core/x86_rfi000_TSO_ALL/rfi000.c new file mode 100644 index 00000000000..54591084bd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_TSO_ALL/rfi000.c @@ -0,0 +1,53 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi000_TSO_ALL/test.desc new file mode 100644 index 00000000000..f21779e6b95 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_TSO_OPC/rfi000.c b/regression/goto-instrument-wmm-core/x86_rfi000_TSO_OPC/rfi000.c new file mode 100644 index 00000000000..54591084bd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_TSO_OPC/rfi000.c @@ -0,0 +1,53 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi000_TSO_OPC/test.desc new file mode 100644 index 00000000000..46495d791d5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi000.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi000_TSO_OPT/test.desc index 6f67a403927..1e7a6685167 100644 --- a/regression/goto-instrument-wmm-core/x86_rfi000_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_rfi000_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk rfi000.c TSO OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_CAV11_ERROR/rfi001.c b/regression/goto-instrument-wmm-core/x86_rfi001_CAV11_ERROR/rfi001.c new file mode 100644 index 00000000000..9081cd4d058 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_CAV11_ERROR/rfi001.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_rfi001_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..c8c3476f676 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_POWER_ALL/rfi001.c b/regression/goto-instrument-wmm-core/x86_rfi001_POWER_ALL/rfi001.c new file mode 100644 index 00000000000..9081cd4d058 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_POWER_ALL/rfi001.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi001_POWER_ALL/test.desc new file mode 100644 index 00000000000..b5d878600ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_POWER_OPC/rfi001.c b/regression/goto-instrument-wmm-core/x86_rfi001_POWER_OPC/rfi001.c new file mode 100644 index 00000000000..9081cd4d058 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_POWER_OPC/rfi001.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi001_POWER_OPC/test.desc new file mode 100644 index 00000000000..3b4be1b88f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_POWER_OPT/rfi001.c b/regression/goto-instrument-wmm-core/x86_rfi001_POWER_OPT/rfi001.c new file mode 100644 index 00000000000..9081cd4d058 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_POWER_OPT/rfi001.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi001_POWER_OPT/test.desc new file mode 100644 index 00000000000..18d8c500a6a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi001.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_PSO_ALL/rfi001.c b/regression/goto-instrument-wmm-core/x86_rfi001_PSO_ALL/rfi001.c new file mode 100644 index 00000000000..9081cd4d058 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_PSO_ALL/rfi001.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi001_PSO_ALL/test.desc new file mode 100644 index 00000000000..27475e15c8f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_PSO_OPC/rfi001.c b/regression/goto-instrument-wmm-core/x86_rfi001_PSO_OPC/rfi001.c new file mode 100644 index 00000000000..9081cd4d058 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_PSO_OPC/rfi001.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi001_PSO_OPC/test.desc new file mode 100644 index 00000000000..24f64a2ef42 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_PSO_OPT/rfi001.c b/regression/goto-instrument-wmm-core/x86_rfi001_PSO_OPT/rfi001.c new file mode 100644 index 00000000000..9081cd4d058 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_PSO_OPT/rfi001.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi001_PSO_OPT/test.desc new file mode 100644 index 00000000000..ec73710576a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi001.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_RMO_ALL/rfi001.c b/regression/goto-instrument-wmm-core/x86_rfi001_RMO_ALL/rfi001.c new file mode 100644 index 00000000000..9081cd4d058 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_RMO_ALL/rfi001.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi001_RMO_ALL/test.desc new file mode 100644 index 00000000000..8a1d9ba0deb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_RMO_OPC/rfi001.c b/regression/goto-instrument-wmm-core/x86_rfi001_RMO_OPC/rfi001.c new file mode 100644 index 00000000000..9081cd4d058 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_RMO_OPC/rfi001.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi001_RMO_OPC/test.desc new file mode 100644 index 00000000000..69352608b8c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_RMO_OPT/rfi001.c b/regression/goto-instrument-wmm-core/x86_rfi001_RMO_OPT/rfi001.c new file mode 100644 index 00000000000..9081cd4d058 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_RMO_OPT/rfi001.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi001_RMO_OPT/test.desc new file mode 100644 index 00000000000..da6de5b2a7b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi001.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_SC_SAFE/rfi001.c b/regression/goto-instrument-wmm-core/x86_rfi001_SC_SAFE/rfi001.c new file mode 100644 index 00000000000..9081cd4d058 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_SC_SAFE/rfi001.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_rfi001_SC_SAFE/test.desc new file mode 100644 index 00000000000..c9d905c442a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_TSO_ALL/rfi001.c b/regression/goto-instrument-wmm-core/x86_rfi001_TSO_ALL/rfi001.c new file mode 100644 index 00000000000..9081cd4d058 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_TSO_ALL/rfi001.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi001_TSO_ALL/test.desc new file mode 100644 index 00000000000..a69dce9e9a9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_TSO_OPC/rfi001.c b/regression/goto-instrument-wmm-core/x86_rfi001_TSO_OPC/rfi001.c new file mode 100644 index 00000000000..9081cd4d058 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_TSO_OPC/rfi001.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi001_TSO_OPC/test.desc new file mode 100644 index 00000000000..31ee875a4d8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi001.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_TSO_OPT/rfi001.c b/regression/goto-instrument-wmm-core/x86_rfi001_TSO_OPT/rfi001.c new file mode 100644 index 00000000000..9081cd4d058 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_TSO_OPT/rfi001.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi001_TSO_OPT/test.desc new file mode 100644 index 00000000000..e5e26f9c63b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi001.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_CAV11_ERROR/rfi002.c b/regression/goto-instrument-wmm-core/x86_rfi002_CAV11_ERROR/rfi002.c new file mode 100644 index 00000000000..dc5bff3fc99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_CAV11_ERROR/rfi002.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_rfi002_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..9fe9c0548b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_POWER_ALL/rfi002.c b/regression/goto-instrument-wmm-core/x86_rfi002_POWER_ALL/rfi002.c new file mode 100644 index 00000000000..dc5bff3fc99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_POWER_ALL/rfi002.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi002_POWER_ALL/test.desc new file mode 100644 index 00000000000..4a353f2e4fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +rfi002.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_POWER_OPC/rfi002.c b/regression/goto-instrument-wmm-core/x86_rfi002_POWER_OPC/rfi002.c new file mode 100644 index 00000000000..dc5bff3fc99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_POWER_OPC/rfi002.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi002_POWER_OPC/test.desc new file mode 100644 index 00000000000..9f8f1fb30ab --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_POWER_OPT/rfi002.c b/regression/goto-instrument-wmm-core/x86_rfi002_POWER_OPT/rfi002.c new file mode 100644 index 00000000000..dc5bff3fc99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_POWER_OPT/rfi002.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi002_POWER_OPT/test.desc new file mode 100644 index 00000000000..222fdd4e68e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi002.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_PSO_ALL/rfi002.c b/regression/goto-instrument-wmm-core/x86_rfi002_PSO_ALL/rfi002.c new file mode 100644 index 00000000000..dc5bff3fc99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_PSO_ALL/rfi002.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi002_PSO_ALL/test.desc new file mode 100644 index 00000000000..099732df42c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_PSO_OPC/rfi002.c b/regression/goto-instrument-wmm-core/x86_rfi002_PSO_OPC/rfi002.c new file mode 100644 index 00000000000..dc5bff3fc99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_PSO_OPC/rfi002.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi002_PSO_OPC/test.desc new file mode 100644 index 00000000000..7ba24dcd0b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_PSO_OPT/rfi002.c b/regression/goto-instrument-wmm-core/x86_rfi002_PSO_OPT/rfi002.c new file mode 100644 index 00000000000..dc5bff3fc99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_PSO_OPT/rfi002.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi002_PSO_OPT/test.desc new file mode 100644 index 00000000000..c6aa084cf36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi002.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_RMO_ALL/rfi002.c b/regression/goto-instrument-wmm-core/x86_rfi002_RMO_ALL/rfi002.c new file mode 100644 index 00000000000..dc5bff3fc99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_RMO_ALL/rfi002.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi002_RMO_ALL/test.desc new file mode 100644 index 00000000000..8cfa5ae1c21 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +rfi002.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_RMO_OPC/rfi002.c b/regression/goto-instrument-wmm-core/x86_rfi002_RMO_OPC/rfi002.c new file mode 100644 index 00000000000..dc5bff3fc99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_RMO_OPC/rfi002.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi002_RMO_OPC/test.desc new file mode 100644 index 00000000000..11400db5db6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_RMO_OPT/rfi002.c b/regression/goto-instrument-wmm-core/x86_rfi002_RMO_OPT/rfi002.c new file mode 100644 index 00000000000..dc5bff3fc99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_RMO_OPT/rfi002.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi002_RMO_OPT/test.desc new file mode 100644 index 00000000000..fc540648cce --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi002.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_SC_SAFE/rfi002.c b/regression/goto-instrument-wmm-core/x86_rfi002_SC_SAFE/rfi002.c new file mode 100644 index 00000000000..dc5bff3fc99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_SC_SAFE/rfi002.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_rfi002_SC_SAFE/test.desc new file mode 100644 index 00000000000..ea26d61db05 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_TSO_ALL/rfi002.c b/regression/goto-instrument-wmm-core/x86_rfi002_TSO_ALL/rfi002.c new file mode 100644 index 00000000000..dc5bff3fc99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_TSO_ALL/rfi002.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi002_TSO_ALL/test.desc new file mode 100644 index 00000000000..c817c8a29d5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_TSO_OPC/rfi002.c b/regression/goto-instrument-wmm-core/x86_rfi002_TSO_OPC/rfi002.c new file mode 100644 index 00000000000..dc5bff3fc99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_TSO_OPC/rfi002.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi002_TSO_OPC/test.desc new file mode 100644 index 00000000000..48b3423eafe --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi002.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_TSO_OPT/rfi002.c b/regression/goto-instrument-wmm-core/x86_rfi002_TSO_OPT/rfi002.c new file mode 100644 index 00000000000..dc5bff3fc99 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_TSO_OPT/rfi002.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi002_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi002_TSO_OPT/test.desc new file mode 100644 index 00000000000..7211e374905 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi002_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi002.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_CAV11_ERROR/rfi003.c b/regression/goto-instrument-wmm-core/x86_rfi003_CAV11_ERROR/rfi003.c new file mode 100644 index 00000000000..fe9332fe13e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_CAV11_ERROR/rfi003.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_rfi003_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..87337439b3d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi003.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_POWER_ALL/rfi003.c b/regression/goto-instrument-wmm-core/x86_rfi003_POWER_ALL/rfi003.c new file mode 100644 index 00000000000..fe9332fe13e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_POWER_ALL/rfi003.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi003_POWER_ALL/test.desc new file mode 100644 index 00000000000..2ea35a2c315 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi003.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_POWER_OPC/rfi003.c b/regression/goto-instrument-wmm-core/x86_rfi003_POWER_OPC/rfi003.c new file mode 100644 index 00000000000..fe9332fe13e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_POWER_OPC/rfi003.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi003_POWER_OPC/test.desc new file mode 100644 index 00000000000..214809a05d7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi003.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_POWER_OPT/rfi003.c b/regression/goto-instrument-wmm-core/x86_rfi003_POWER_OPT/rfi003.c new file mode 100644 index 00000000000..fe9332fe13e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_POWER_OPT/rfi003.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi003_POWER_OPT/test.desc new file mode 100644 index 00000000000..bc03bb6131a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi003.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_PSO_ALL/rfi003.c b/regression/goto-instrument-wmm-core/x86_rfi003_PSO_ALL/rfi003.c new file mode 100644 index 00000000000..fe9332fe13e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_PSO_ALL/rfi003.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi003_PSO_ALL/test.desc new file mode 100644 index 00000000000..4bd7d1715dc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi003.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_PSO_OPC/rfi003.c b/regression/goto-instrument-wmm-core/x86_rfi003_PSO_OPC/rfi003.c new file mode 100644 index 00000000000..fe9332fe13e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_PSO_OPC/rfi003.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi003_PSO_OPC/test.desc new file mode 100644 index 00000000000..48cffd24705 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi003.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_PSO_OPT/rfi003.c b/regression/goto-instrument-wmm-core/x86_rfi003_PSO_OPT/rfi003.c new file mode 100644 index 00000000000..fe9332fe13e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_PSO_OPT/rfi003.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi003_PSO_OPT/test.desc new file mode 100644 index 00000000000..5b700101be6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi003.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_RMO_ALL/rfi003.c b/regression/goto-instrument-wmm-core/x86_rfi003_RMO_ALL/rfi003.c new file mode 100644 index 00000000000..fe9332fe13e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_RMO_ALL/rfi003.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi003_RMO_ALL/test.desc new file mode 100644 index 00000000000..9211d64d4fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi003.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_RMO_OPC/rfi003.c b/regression/goto-instrument-wmm-core/x86_rfi003_RMO_OPC/rfi003.c new file mode 100644 index 00000000000..fe9332fe13e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_RMO_OPC/rfi003.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi003_RMO_OPC/test.desc new file mode 100644 index 00000000000..3fc49306f53 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi003.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_RMO_OPT/rfi003.c b/regression/goto-instrument-wmm-core/x86_rfi003_RMO_OPT/rfi003.c new file mode 100644 index 00000000000..fe9332fe13e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_RMO_OPT/rfi003.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi003_RMO_OPT/test.desc new file mode 100644 index 00000000000..7ff306ce3b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi003.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_SC_SAFE/rfi003.c b/regression/goto-instrument-wmm-core/x86_rfi003_SC_SAFE/rfi003.c new file mode 100644 index 00000000000..fe9332fe13e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_SC_SAFE/rfi003.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_rfi003_SC_SAFE/test.desc new file mode 100644 index 00000000000..51d2a7b057a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi003.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_TSO_ALL/rfi003.c b/regression/goto-instrument-wmm-core/x86_rfi003_TSO_ALL/rfi003.c new file mode 100644 index 00000000000..fe9332fe13e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_TSO_ALL/rfi003.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi003_TSO_ALL/test.desc new file mode 100644 index 00000000000..e6e654bbfaa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi003.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_TSO_OPC/rfi003.c b/regression/goto-instrument-wmm-core/x86_rfi003_TSO_OPC/rfi003.c new file mode 100644 index 00000000000..fe9332fe13e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_TSO_OPC/rfi003.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 1), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi003_TSO_OPC/test.desc new file mode 100644 index 00000000000..31396e295fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi003_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi003.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi003_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi003_TSO_OPT/test.desc index 9cc90846eab..b7aca90e4dc 100644 --- a/regression/goto-instrument-wmm-core/x86_rfi003_TSO_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_rfi003_TSO_OPT/test.desc @@ -1,6 +1,7 @@ -THOROUGH +CORE glpk rfi003.c TSO OPT +^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_CAV11_ERROR/rfi004.c b/regression/goto-instrument-wmm-core/x86_rfi004_CAV11_ERROR/rfi004.c new file mode 100644 index 00000000000..e5f74156139 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_CAV11_ERROR/rfi004.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_rfi004_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..12b6c354a66 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi004.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_POWER_ALL/rfi004.c b/regression/goto-instrument-wmm-core/x86_rfi004_POWER_ALL/rfi004.c new file mode 100644 index 00000000000..e5f74156139 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_POWER_ALL/rfi004.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi004_POWER_ALL/test.desc new file mode 100644 index 00000000000..aa67fcdb51c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi004.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_POWER_OPC/rfi004.c b/regression/goto-instrument-wmm-core/x86_rfi004_POWER_OPC/rfi004.c new file mode 100644 index 00000000000..e5f74156139 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_POWER_OPC/rfi004.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi004_POWER_OPC/test.desc new file mode 100644 index 00000000000..9a2c2072116 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi004.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_POWER_OPT/rfi004.c b/regression/goto-instrument-wmm-core/x86_rfi004_POWER_OPT/rfi004.c new file mode 100644 index 00000000000..e5f74156139 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_POWER_OPT/rfi004.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi004_POWER_OPT/test.desc new file mode 100644 index 00000000000..9d5a7954f59 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi004.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_PSO_ALL/rfi004.c b/regression/goto-instrument-wmm-core/x86_rfi004_PSO_ALL/rfi004.c new file mode 100644 index 00000000000..e5f74156139 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_PSO_ALL/rfi004.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi004_PSO_ALL/test.desc new file mode 100644 index 00000000000..b20dc6cab1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi004.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_PSO_OPC/rfi004.c b/regression/goto-instrument-wmm-core/x86_rfi004_PSO_OPC/rfi004.c new file mode 100644 index 00000000000..e5f74156139 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_PSO_OPC/rfi004.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi004_PSO_OPC/test.desc new file mode 100644 index 00000000000..427e33d5ea6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi004.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_PSO_OPT/rfi004.c b/regression/goto-instrument-wmm-core/x86_rfi004_PSO_OPT/rfi004.c new file mode 100644 index 00000000000..e5f74156139 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_PSO_OPT/rfi004.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi004_PSO_OPT/test.desc new file mode 100644 index 00000000000..381d9919c04 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi004.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_RMO_ALL/rfi004.c b/regression/goto-instrument-wmm-core/x86_rfi004_RMO_ALL/rfi004.c new file mode 100644 index 00000000000..e5f74156139 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_RMO_ALL/rfi004.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi004_RMO_ALL/test.desc new file mode 100644 index 00000000000..27e8f57e1f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi004.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_RMO_OPC/rfi004.c b/regression/goto-instrument-wmm-core/x86_rfi004_RMO_OPC/rfi004.c new file mode 100644 index 00000000000..e5f74156139 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_RMO_OPC/rfi004.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi004_RMO_OPC/test.desc new file mode 100644 index 00000000000..daf76e1758a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi004.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_RMO_OPT/rfi004.c b/regression/goto-instrument-wmm-core/x86_rfi004_RMO_OPT/rfi004.c new file mode 100644 index 00000000000..e5f74156139 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_RMO_OPT/rfi004.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi004_RMO_OPT/test.desc new file mode 100644 index 00000000000..299c2b08611 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi004.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_SC_SAFE/rfi004.c b/regression/goto-instrument-wmm-core/x86_rfi004_SC_SAFE/rfi004.c new file mode 100644 index 00000000000..e5f74156139 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_SC_SAFE/rfi004.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_rfi004_SC_SAFE/test.desc new file mode 100644 index 00000000000..2ecbb956b76 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi004.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_TSO_ALL/rfi004.c b/regression/goto-instrument-wmm-core/x86_rfi004_TSO_ALL/rfi004.c new file mode 100644 index 00000000000..e5f74156139 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_TSO_ALL/rfi004.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi004_TSO_ALL/test.desc new file mode 100644 index 00000000000..a37642ddcb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi004.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_TSO_OPC/rfi004.c b/regression/goto-instrument-wmm-core/x86_rfi004_TSO_OPC/rfi004.c new file mode 100644 index 00000000000..e5f74156139 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_TSO_OPC/rfi004.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi004_TSO_OPC/test.desc new file mode 100644 index 00000000000..9555c2c24af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi004.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_TSO_OPT/rfi004.c b/regression/goto-instrument-wmm-core/x86_rfi004_TSO_OPT/rfi004.c new file mode 100644 index 00000000000..e5f74156139 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_TSO_OPT/rfi004.c @@ -0,0 +1,57 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + z = 1; + __unbuffered_p1_EAX = z; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi004_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi004_TSO_OPT/test.desc new file mode 100644 index 00000000000..da1a7bcb7c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi004_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi004.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_CAV11_ERROR/rfi005.c b/regression/goto-instrument-wmm-core/x86_rfi005_CAV11_ERROR/rfi005.c new file mode 100644 index 00000000000..a19653bc7b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_CAV11_ERROR/rfi005.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_rfi005_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..1e9e54a646a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi005.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_POWER_ALL/rfi005.c b/regression/goto-instrument-wmm-core/x86_rfi005_POWER_ALL/rfi005.c new file mode 100644 index 00000000000..a19653bc7b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_POWER_ALL/rfi005.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi005_POWER_ALL/test.desc new file mode 100644 index 00000000000..fb10625cc1f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi005.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_POWER_OPC/rfi005.c b/regression/goto-instrument-wmm-core/x86_rfi005_POWER_OPC/rfi005.c new file mode 100644 index 00000000000..a19653bc7b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_POWER_OPC/rfi005.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi005_POWER_OPC/test.desc new file mode 100644 index 00000000000..65d92cec24b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi005.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_POWER_OPT/rfi005.c b/regression/goto-instrument-wmm-core/x86_rfi005_POWER_OPT/rfi005.c new file mode 100644 index 00000000000..a19653bc7b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_POWER_OPT/rfi005.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi005_POWER_OPT/test.desc new file mode 100644 index 00000000000..4d11a224103 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi005.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_PSO_ALL/rfi005.c b/regression/goto-instrument-wmm-core/x86_rfi005_PSO_ALL/rfi005.c new file mode 100644 index 00000000000..a19653bc7b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_PSO_ALL/rfi005.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi005_PSO_ALL/test.desc new file mode 100644 index 00000000000..3b59216a7e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi005.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_PSO_OPC/rfi005.c b/regression/goto-instrument-wmm-core/x86_rfi005_PSO_OPC/rfi005.c new file mode 100644 index 00000000000..a19653bc7b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_PSO_OPC/rfi005.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi005_PSO_OPC/test.desc new file mode 100644 index 00000000000..0e40476fda5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi005.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_PSO_OPT/rfi005.c b/regression/goto-instrument-wmm-core/x86_rfi005_PSO_OPT/rfi005.c new file mode 100644 index 00000000000..a19653bc7b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_PSO_OPT/rfi005.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi005_PSO_OPT/test.desc new file mode 100644 index 00000000000..def4b9cd9f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi005.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_RMO_ALL/rfi005.c b/regression/goto-instrument-wmm-core/x86_rfi005_RMO_ALL/rfi005.c new file mode 100644 index 00000000000..a19653bc7b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_RMO_ALL/rfi005.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi005_RMO_ALL/test.desc new file mode 100644 index 00000000000..320fcb34efa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi005.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_RMO_OPC/rfi005.c b/regression/goto-instrument-wmm-core/x86_rfi005_RMO_OPC/rfi005.c new file mode 100644 index 00000000000..a19653bc7b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_RMO_OPC/rfi005.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi005_RMO_OPC/test.desc new file mode 100644 index 00000000000..cfc3089f42b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi005.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_RMO_OPT/rfi005.c b/regression/goto-instrument-wmm-core/x86_rfi005_RMO_OPT/rfi005.c new file mode 100644 index 00000000000..a19653bc7b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_RMO_OPT/rfi005.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi005_RMO_OPT/test.desc new file mode 100644 index 00000000000..bcd9bc99926 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi005.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_SC_SAFE/rfi005.c b/regression/goto-instrument-wmm-core/x86_rfi005_SC_SAFE/rfi005.c new file mode 100644 index 00000000000..a19653bc7b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_SC_SAFE/rfi005.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_rfi005_SC_SAFE/test.desc new file mode 100644 index 00000000000..b1b75854cb4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi005.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_TSO_ALL/rfi005.c b/regression/goto-instrument-wmm-core/x86_rfi005_TSO_ALL/rfi005.c new file mode 100644 index 00000000000..a19653bc7b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_TSO_ALL/rfi005.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi005_TSO_ALL/test.desc new file mode 100644 index 00000000000..2ce00e970ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi005.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_TSO_OPC/rfi005.c b/regression/goto-instrument-wmm-core/x86_rfi005_TSO_OPC/rfi005.c new file mode 100644 index 00000000000..a19653bc7b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_TSO_OPC/rfi005.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi005_TSO_OPC/test.desc new file mode 100644 index 00000000000..ffe646dc2b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi005.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_TSO_OPT/rfi005.c b/regression/goto-instrument-wmm-core/x86_rfi005_TSO_OPT/rfi005.c new file mode 100644 index 00000000000..a19653bc7b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_TSO_OPT/rfi005.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi005_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi005_TSO_OPT/test.desc new file mode 100644 index 00000000000..78c7be525e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi005_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi005.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_CAV11_ERROR/rfi006.c b/regression/goto-instrument-wmm-core/x86_rfi006_CAV11_ERROR/rfi006.c new file mode 100644 index 00000000000..f1a682a1756 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_CAV11_ERROR/rfi006.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_rfi006_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..c9034cb342b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi006.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_POWER_ALL/rfi006.c b/regression/goto-instrument-wmm-core/x86_rfi006_POWER_ALL/rfi006.c new file mode 100644 index 00000000000..f1a682a1756 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_POWER_ALL/rfi006.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi006_POWER_ALL/test.desc new file mode 100644 index 00000000000..36aa9d30410 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi006.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_POWER_OPC/rfi006.c b/regression/goto-instrument-wmm-core/x86_rfi006_POWER_OPC/rfi006.c new file mode 100644 index 00000000000..f1a682a1756 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_POWER_OPC/rfi006.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi006_POWER_OPC/test.desc new file mode 100644 index 00000000000..0ad8f037137 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi006.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_POWER_OPT/rfi006.c b/regression/goto-instrument-wmm-core/x86_rfi006_POWER_OPT/rfi006.c new file mode 100644 index 00000000000..f1a682a1756 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_POWER_OPT/rfi006.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi006_POWER_OPT/test.desc new file mode 100644 index 00000000000..474d103516d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi006.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_PSO_ALL/rfi006.c b/regression/goto-instrument-wmm-core/x86_rfi006_PSO_ALL/rfi006.c new file mode 100644 index 00000000000..f1a682a1756 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_PSO_ALL/rfi006.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi006_PSO_ALL/test.desc new file mode 100644 index 00000000000..598389e462e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi006.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_PSO_OPC/rfi006.c b/regression/goto-instrument-wmm-core/x86_rfi006_PSO_OPC/rfi006.c new file mode 100644 index 00000000000..f1a682a1756 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_PSO_OPC/rfi006.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi006_PSO_OPC/test.desc new file mode 100644 index 00000000000..b7f40d1aea0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi006.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_PSO_OPT/rfi006.c b/regression/goto-instrument-wmm-core/x86_rfi006_PSO_OPT/rfi006.c new file mode 100644 index 00000000000..f1a682a1756 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_PSO_OPT/rfi006.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi006_PSO_OPT/test.desc new file mode 100644 index 00000000000..7136582cf4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi006.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_RMO_ALL/rfi006.c b/regression/goto-instrument-wmm-core/x86_rfi006_RMO_ALL/rfi006.c new file mode 100644 index 00000000000..f1a682a1756 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_RMO_ALL/rfi006.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi006_RMO_ALL/test.desc new file mode 100644 index 00000000000..2ee8450906f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +rfi006.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_RMO_OPC/rfi006.c b/regression/goto-instrument-wmm-core/x86_rfi006_RMO_OPC/rfi006.c new file mode 100644 index 00000000000..f1a682a1756 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_RMO_OPC/rfi006.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi006_RMO_OPC/test.desc new file mode 100644 index 00000000000..7d8b76a31c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi006.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_RMO_OPT/rfi006.c b/regression/goto-instrument-wmm-core/x86_rfi006_RMO_OPT/rfi006.c new file mode 100644 index 00000000000..f1a682a1756 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_RMO_OPT/rfi006.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi006_RMO_OPT/test.desc new file mode 100644 index 00000000000..5eb6fbb90d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi006.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_SC_SAFE/rfi006.c b/regression/goto-instrument-wmm-core/x86_rfi006_SC_SAFE/rfi006.c new file mode 100644 index 00000000000..f1a682a1756 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_SC_SAFE/rfi006.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_rfi006_SC_SAFE/test.desc new file mode 100644 index 00000000000..09b834087e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi006.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_TSO_ALL/rfi006.c b/regression/goto-instrument-wmm-core/x86_rfi006_TSO_ALL/rfi006.c new file mode 100644 index 00000000000..f1a682a1756 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_TSO_ALL/rfi006.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi006_TSO_ALL/test.desc new file mode 100644 index 00000000000..ab158d88126 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi006.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_TSO_OPC/rfi006.c b/regression/goto-instrument-wmm-core/x86_rfi006_TSO_OPC/rfi006.c new file mode 100644 index 00000000000..f1a682a1756 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_TSO_OPC/rfi006.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi006_TSO_OPC/test.desc new file mode 100644 index 00000000000..d4dfcefc31c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi006.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_TSO_OPT/rfi006.c b/regression/goto-instrument-wmm-core/x86_rfi006_TSO_OPT/rfi006.c new file mode 100644 index 00000000000..f1a682a1756 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_TSO_OPT/rfi006.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 2 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi006_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi006_TSO_OPT/test.desc new file mode 100644 index 00000000000..d41d84b830b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi006_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi006.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_CAV11_ERROR/rfi007.c b/regression/goto-instrument-wmm-core/x86_rfi007_CAV11_ERROR/rfi007.c new file mode 100644 index 00000000000..f6bfacef4d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_CAV11_ERROR/rfi007.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_rfi007_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..2f7691e2fd6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi007.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_POWER_ALL/rfi007.c b/regression/goto-instrument-wmm-core/x86_rfi007_POWER_ALL/rfi007.c new file mode 100644 index 00000000000..f6bfacef4d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_POWER_ALL/rfi007.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi007_POWER_ALL/test.desc new file mode 100644 index 00000000000..1c180c975a0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi007.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_POWER_OPC/rfi007.c b/regression/goto-instrument-wmm-core/x86_rfi007_POWER_OPC/rfi007.c new file mode 100644 index 00000000000..f6bfacef4d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_POWER_OPC/rfi007.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi007_POWER_OPC/test.desc new file mode 100644 index 00000000000..88cd9b2d22a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi007.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_POWER_OPT/rfi007.c b/regression/goto-instrument-wmm-core/x86_rfi007_POWER_OPT/rfi007.c new file mode 100644 index 00000000000..f6bfacef4d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_POWER_OPT/rfi007.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi007_POWER_OPT/test.desc new file mode 100644 index 00000000000..8e27681eb91 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi007.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_PSO_ALL/rfi007.c b/regression/goto-instrument-wmm-core/x86_rfi007_PSO_ALL/rfi007.c new file mode 100644 index 00000000000..f6bfacef4d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_PSO_ALL/rfi007.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi007_PSO_ALL/test.desc new file mode 100644 index 00000000000..8220a207768 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi007.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_PSO_OPC/rfi007.c b/regression/goto-instrument-wmm-core/x86_rfi007_PSO_OPC/rfi007.c new file mode 100644 index 00000000000..f6bfacef4d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_PSO_OPC/rfi007.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi007_PSO_OPC/test.desc new file mode 100644 index 00000000000..b0c3aea3c75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi007.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_PSO_OPT/rfi007.c b/regression/goto-instrument-wmm-core/x86_rfi007_PSO_OPT/rfi007.c new file mode 100644 index 00000000000..f6bfacef4d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_PSO_OPT/rfi007.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi007_PSO_OPT/test.desc new file mode 100644 index 00000000000..d5971cbcf00 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi007.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_RMO_ALL/rfi007.c b/regression/goto-instrument-wmm-core/x86_rfi007_RMO_ALL/rfi007.c new file mode 100644 index 00000000000..f6bfacef4d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_RMO_ALL/rfi007.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi007_RMO_ALL/test.desc new file mode 100644 index 00000000000..fef52418af6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi007.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_RMO_OPC/rfi007.c b/regression/goto-instrument-wmm-core/x86_rfi007_RMO_OPC/rfi007.c new file mode 100644 index 00000000000..f6bfacef4d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_RMO_OPC/rfi007.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi007_RMO_OPC/test.desc new file mode 100644 index 00000000000..1fd08726415 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi007.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_RMO_OPT/rfi007.c b/regression/goto-instrument-wmm-core/x86_rfi007_RMO_OPT/rfi007.c new file mode 100644 index 00000000000..f6bfacef4d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_RMO_OPT/rfi007.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi007_RMO_OPT/test.desc new file mode 100644 index 00000000000..b1c5f7544e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi007.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_SC_SAFE/rfi007.c b/regression/goto-instrument-wmm-core/x86_rfi007_SC_SAFE/rfi007.c new file mode 100644 index 00000000000..f6bfacef4d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_SC_SAFE/rfi007.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_rfi007_SC_SAFE/test.desc new file mode 100644 index 00000000000..898305fba31 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi007.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_TSO_ALL/rfi007.c b/regression/goto-instrument-wmm-core/x86_rfi007_TSO_ALL/rfi007.c new file mode 100644 index 00000000000..f6bfacef4d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_TSO_ALL/rfi007.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi007_TSO_ALL/test.desc new file mode 100644 index 00000000000..140ca568b91 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi007.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_TSO_OPC/rfi007.c b/regression/goto-instrument-wmm-core/x86_rfi007_TSO_OPC/rfi007.c new file mode 100644 index 00000000000..f6bfacef4d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_TSO_OPC/rfi007.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi007_TSO_OPC/test.desc new file mode 100644 index 00000000000..70938c64131 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi007.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_TSO_OPT/rfi007.c b/regression/goto-instrument-wmm-core/x86_rfi007_TSO_OPT/rfi007.c new file mode 100644 index 00000000000..f6bfacef4d0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_TSO_OPT/rfi007.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 2 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi007_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi007_TSO_OPT/test.desc new file mode 100644 index 00000000000..bd23a4ed835 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi007_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi007.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_CAV11_ERROR/rfi008.c b/regression/goto-instrument-wmm-core/x86_rfi008_CAV11_ERROR/rfi008.c new file mode 100644 index 00000000000..4648abe37cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_CAV11_ERROR/rfi008.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_rfi008_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..e23486ef4c5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi008.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_POWER_ALL/rfi008.c b/regression/goto-instrument-wmm-core/x86_rfi008_POWER_ALL/rfi008.c new file mode 100644 index 00000000000..4648abe37cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_POWER_ALL/rfi008.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi008_POWER_ALL/test.desc new file mode 100644 index 00000000000..6d5512ed07f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi008.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_POWER_OPC/rfi008.c b/regression/goto-instrument-wmm-core/x86_rfi008_POWER_OPC/rfi008.c new file mode 100644 index 00000000000..4648abe37cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_POWER_OPC/rfi008.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi008_POWER_OPC/test.desc new file mode 100644 index 00000000000..547cb99f948 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi008.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_POWER_OPT/rfi008.c b/regression/goto-instrument-wmm-core/x86_rfi008_POWER_OPT/rfi008.c new file mode 100644 index 00000000000..4648abe37cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_POWER_OPT/rfi008.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi008_POWER_OPT/test.desc new file mode 100644 index 00000000000..79253c0c718 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi008.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_PSO_ALL/rfi008.c b/regression/goto-instrument-wmm-core/x86_rfi008_PSO_ALL/rfi008.c new file mode 100644 index 00000000000..4648abe37cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_PSO_ALL/rfi008.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi008_PSO_ALL/test.desc new file mode 100644 index 00000000000..d1a3a445b81 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi008.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_PSO_OPC/rfi008.c b/regression/goto-instrument-wmm-core/x86_rfi008_PSO_OPC/rfi008.c new file mode 100644 index 00000000000..4648abe37cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_PSO_OPC/rfi008.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi008_PSO_OPC/test.desc new file mode 100644 index 00000000000..e13ada07138 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi008.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_PSO_OPT/rfi008.c b/regression/goto-instrument-wmm-core/x86_rfi008_PSO_OPT/rfi008.c new file mode 100644 index 00000000000..4648abe37cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_PSO_OPT/rfi008.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi008_PSO_OPT/test.desc new file mode 100644 index 00000000000..2598a37e79b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi008.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_RMO_ALL/rfi008.c b/regression/goto-instrument-wmm-core/x86_rfi008_RMO_ALL/rfi008.c new file mode 100644 index 00000000000..4648abe37cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_RMO_ALL/rfi008.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi008_RMO_ALL/test.desc new file mode 100644 index 00000000000..f938c66447a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi008.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_RMO_OPC/rfi008.c b/regression/goto-instrument-wmm-core/x86_rfi008_RMO_OPC/rfi008.c new file mode 100644 index 00000000000..4648abe37cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_RMO_OPC/rfi008.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi008_RMO_OPC/test.desc new file mode 100644 index 00000000000..15cb548a15a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi008.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_RMO_OPT/rfi008.c b/regression/goto-instrument-wmm-core/x86_rfi008_RMO_OPT/rfi008.c new file mode 100644 index 00000000000..4648abe37cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_RMO_OPT/rfi008.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi008_RMO_OPT/test.desc new file mode 100644 index 00000000000..0da1a89f525 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi008.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_SC_SAFE/rfi008.c b/regression/goto-instrument-wmm-core/x86_rfi008_SC_SAFE/rfi008.c new file mode 100644 index 00000000000..4648abe37cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_SC_SAFE/rfi008.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_rfi008_SC_SAFE/test.desc new file mode 100644 index 00000000000..29b9b16248b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi008.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_TSO_ALL/rfi008.c b/regression/goto-instrument-wmm-core/x86_rfi008_TSO_ALL/rfi008.c new file mode 100644 index 00000000000..4648abe37cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_TSO_ALL/rfi008.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi008_TSO_ALL/test.desc new file mode 100644 index 00000000000..0c958a4661a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi008.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_TSO_OPC/rfi008.c b/regression/goto-instrument-wmm-core/x86_rfi008_TSO_OPC/rfi008.c new file mode 100644 index 00000000000..4648abe37cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_TSO_OPC/rfi008.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi008_TSO_OPC/test.desc new file mode 100644 index 00000000000..eed95e8d340 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi008.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_TSO_OPT/rfi008.c b/regression/goto-instrument-wmm-core/x86_rfi008_TSO_OPT/rfi008.c new file mode 100644 index 00000000000..4648abe37cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_TSO_OPT/rfi008.c @@ -0,0 +1,56 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi008_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi008_TSO_OPT/test.desc new file mode 100644 index 00000000000..32c995f4699 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi008_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi008.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_CAV11_ERROR/rfi009.c b/regression/goto-instrument-wmm-core/x86_rfi009_CAV11_ERROR/rfi009.c new file mode 100644 index 00000000000..8f2a65184c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_CAV11_ERROR/rfi009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_rfi009_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..20149340875 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi009.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_POWER_ALL/rfi009.c b/regression/goto-instrument-wmm-core/x86_rfi009_POWER_ALL/rfi009.c new file mode 100644 index 00000000000..8f2a65184c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_POWER_ALL/rfi009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi009_POWER_ALL/test.desc new file mode 100644 index 00000000000..f6a0bb597f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi009.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_POWER_OPC/rfi009.c b/regression/goto-instrument-wmm-core/x86_rfi009_POWER_OPC/rfi009.c new file mode 100644 index 00000000000..8f2a65184c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_POWER_OPC/rfi009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi009_POWER_OPC/test.desc new file mode 100644 index 00000000000..e4cfa3d8ce7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi009.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_POWER_OPT/rfi009.c b/regression/goto-instrument-wmm-core/x86_rfi009_POWER_OPT/rfi009.c new file mode 100644 index 00000000000..8f2a65184c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_POWER_OPT/rfi009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi009_POWER_OPT/test.desc new file mode 100644 index 00000000000..4a3fb112332 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi009.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_PSO_ALL/rfi009.c b/regression/goto-instrument-wmm-core/x86_rfi009_PSO_ALL/rfi009.c new file mode 100644 index 00000000000..8f2a65184c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_PSO_ALL/rfi009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi009_PSO_ALL/test.desc new file mode 100644 index 00000000000..b63cf2422bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi009.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_PSO_OPC/rfi009.c b/regression/goto-instrument-wmm-core/x86_rfi009_PSO_OPC/rfi009.c new file mode 100644 index 00000000000..8f2a65184c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_PSO_OPC/rfi009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi009_PSO_OPC/test.desc new file mode 100644 index 00000000000..afda68e7b41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi009.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_PSO_OPT/rfi009.c b/regression/goto-instrument-wmm-core/x86_rfi009_PSO_OPT/rfi009.c new file mode 100644 index 00000000000..8f2a65184c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_PSO_OPT/rfi009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi009_PSO_OPT/test.desc new file mode 100644 index 00000000000..db1ab9d63b1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi009.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_RMO_ALL/rfi009.c b/regression/goto-instrument-wmm-core/x86_rfi009_RMO_ALL/rfi009.c new file mode 100644 index 00000000000..8f2a65184c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_RMO_ALL/rfi009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi009_RMO_ALL/test.desc new file mode 100644 index 00000000000..f3a67b94e31 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi009.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_RMO_OPC/rfi009.c b/regression/goto-instrument-wmm-core/x86_rfi009_RMO_OPC/rfi009.c new file mode 100644 index 00000000000..8f2a65184c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_RMO_OPC/rfi009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi009_RMO_OPC/test.desc new file mode 100644 index 00000000000..fbeada3b79a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi009.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_RMO_OPT/rfi009.c b/regression/goto-instrument-wmm-core/x86_rfi009_RMO_OPT/rfi009.c new file mode 100644 index 00000000000..8f2a65184c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_RMO_OPT/rfi009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi009_RMO_OPT/test.desc new file mode 100644 index 00000000000..fb376b27ffc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi009.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_SC_SAFE/rfi009.c b/regression/goto-instrument-wmm-core/x86_rfi009_SC_SAFE/rfi009.c new file mode 100644 index 00000000000..8f2a65184c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_SC_SAFE/rfi009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_rfi009_SC_SAFE/test.desc new file mode 100644 index 00000000000..96ab0e2a0bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi009.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_TSO_ALL/rfi009.c b/regression/goto-instrument-wmm-core/x86_rfi009_TSO_ALL/rfi009.c new file mode 100644 index 00000000000..8f2a65184c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_TSO_ALL/rfi009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi009_TSO_ALL/test.desc new file mode 100644 index 00000000000..2c931df0bf6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi009.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_TSO_OPC/rfi009.c b/regression/goto-instrument-wmm-core/x86_rfi009_TSO_OPC/rfi009.c new file mode 100644 index 00000000000..8f2a65184c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_TSO_OPC/rfi009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi009_TSO_OPC/test.desc new file mode 100644 index 00000000000..5c63cdb4eda --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi009.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_TSO_OPT/rfi009.c b/regression/goto-instrument-wmm-core/x86_rfi009_TSO_OPT/rfi009.c new file mode 100644 index 00000000000..8f2a65184c8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_TSO_OPT/rfi009.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = x; + __unbuffered_p0_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi009_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi009_TSO_OPT/test.desc new file mode 100644 index 00000000000..0d82e5d3b08 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi009_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi009.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_CAV11_ERROR/rfi010.c b/regression/goto-instrument-wmm-core/x86_rfi010_CAV11_ERROR/rfi010.c new file mode 100644 index 00000000000..399a31de199 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_CAV11_ERROR/rfi010.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_rfi010_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..32a410470a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi010.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_POWER_ALL/rfi010.c b/regression/goto-instrument-wmm-core/x86_rfi010_POWER_ALL/rfi010.c new file mode 100644 index 00000000000..399a31de199 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_POWER_ALL/rfi010.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi010_POWER_ALL/test.desc new file mode 100644 index 00000000000..0407e4f4a32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi010.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_POWER_OPC/rfi010.c b/regression/goto-instrument-wmm-core/x86_rfi010_POWER_OPC/rfi010.c new file mode 100644 index 00000000000..399a31de199 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_POWER_OPC/rfi010.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi010_POWER_OPC/test.desc new file mode 100644 index 00000000000..7141753deb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi010.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_POWER_OPT/rfi010.c b/regression/goto-instrument-wmm-core/x86_rfi010_POWER_OPT/rfi010.c new file mode 100644 index 00000000000..399a31de199 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_POWER_OPT/rfi010.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi010_POWER_OPT/test.desc new file mode 100644 index 00000000000..071eeb6303d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi010.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_PSO_ALL/rfi010.c b/regression/goto-instrument-wmm-core/x86_rfi010_PSO_ALL/rfi010.c new file mode 100644 index 00000000000..399a31de199 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_PSO_ALL/rfi010.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi010_PSO_ALL/test.desc new file mode 100644 index 00000000000..c1564a2a2b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi010.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_PSO_OPC/rfi010.c b/regression/goto-instrument-wmm-core/x86_rfi010_PSO_OPC/rfi010.c new file mode 100644 index 00000000000..399a31de199 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_PSO_OPC/rfi010.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi010_PSO_OPC/test.desc new file mode 100644 index 00000000000..a49ceb13d07 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi010.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_PSO_OPT/rfi010.c b/regression/goto-instrument-wmm-core/x86_rfi010_PSO_OPT/rfi010.c new file mode 100644 index 00000000000..399a31de199 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_PSO_OPT/rfi010.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi010_PSO_OPT/test.desc new file mode 100644 index 00000000000..87d0f347c06 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi010.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_RMO_ALL/rfi010.c b/regression/goto-instrument-wmm-core/x86_rfi010_RMO_ALL/rfi010.c new file mode 100644 index 00000000000..399a31de199 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_RMO_ALL/rfi010.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi010_RMO_ALL/test.desc new file mode 100644 index 00000000000..87afcec9480 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi010.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_RMO_OPC/rfi010.c b/regression/goto-instrument-wmm-core/x86_rfi010_RMO_OPC/rfi010.c new file mode 100644 index 00000000000..399a31de199 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_RMO_OPC/rfi010.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi010_RMO_OPC/test.desc new file mode 100644 index 00000000000..1e6280546a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi010.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_RMO_OPT/rfi010.c b/regression/goto-instrument-wmm-core/x86_rfi010_RMO_OPT/rfi010.c new file mode 100644 index 00000000000..399a31de199 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_RMO_OPT/rfi010.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi010_RMO_OPT/test.desc new file mode 100644 index 00000000000..c99f0bdf922 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi010.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_SC_SAFE/rfi010.c b/regression/goto-instrument-wmm-core/x86_rfi010_SC_SAFE/rfi010.c new file mode 100644 index 00000000000..399a31de199 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_SC_SAFE/rfi010.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_rfi010_SC_SAFE/test.desc new file mode 100644 index 00000000000..dd5c1fd37c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi010.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_TSO_ALL/rfi010.c b/regression/goto-instrument-wmm-core/x86_rfi010_TSO_ALL/rfi010.c new file mode 100644 index 00000000000..399a31de199 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_TSO_ALL/rfi010.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_rfi010_TSO_ALL/test.desc new file mode 100644 index 00000000000..10abfc30e96 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi010.c +TSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_TSO_OPC/rfi010.c b/regression/goto-instrument-wmm-core/x86_rfi010_TSO_OPC/rfi010.c new file mode 100644 index 00000000000..399a31de199 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_TSO_OPC/rfi010.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_rfi010_TSO_OPC/test.desc new file mode 100644 index 00000000000..4a397d40635 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +rfi010.c +TSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_TSO_OPT/rfi010.c b/regression/goto-instrument-wmm-core/x86_rfi010_TSO_OPT/rfi010.c new file mode 100644 index 00000000000..399a31de199 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_TSO_OPT/rfi010.c @@ -0,0 +1,55 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + x = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 1; + __unbuffered_p1_EAX = y; + __unbuffered_p1_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1 && + __unbuffered_p1_EBX == 0), + "Program proven to be relaxed for X86, model checker says YES."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_rfi010_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_rfi010_TSO_OPT/test.desc new file mode 100644 index 00000000000..93d5609331d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_rfi010_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +rfi010.c +TSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe000_CAV11_ERROR/safe000.c b/regression/goto-instrument-wmm-core/x86_safe000_CAV11_ERROR/safe000.c new file mode 100644 index 00000000000..3772b2e83af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_CAV11_ERROR/safe000.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe000_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe000_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..f99285e9f03 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe000_POWER_ALL/safe000.c b/regression/goto-instrument-wmm-core/x86_safe000_POWER_ALL/safe000.c new file mode 100644 index 00000000000..3772b2e83af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_POWER_ALL/safe000.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe000_POWER_ALL/test.desc new file mode 100644 index 00000000000..5e39c72846c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe000_POWER_OPC/safe000.c b/regression/goto-instrument-wmm-core/x86_safe000_POWER_OPC/safe000.c new file mode 100644 index 00000000000..3772b2e83af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_POWER_OPC/safe000.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe000_POWER_OPC/test.desc new file mode 100644 index 00000000000..978fc6eaa75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe000_POWER_OPT/safe000.c b/regression/goto-instrument-wmm-core/x86_safe000_POWER_OPT/safe000.c new file mode 100644 index 00000000000..3772b2e83af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_POWER_OPT/safe000.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe000_POWER_OPT/test.desc new file mode 100644 index 00000000000..446ba2736f9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe000_PSO_ALL/safe000.c b/regression/goto-instrument-wmm-core/x86_safe000_PSO_ALL/safe000.c new file mode 100644 index 00000000000..3772b2e83af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_PSO_ALL/safe000.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe000_PSO_ALL/test.desc new file mode 100644 index 00000000000..d425842f63d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe000_PSO_OPC/safe000.c b/regression/goto-instrument-wmm-core/x86_safe000_PSO_OPC/safe000.c new file mode 100644 index 00000000000..3772b2e83af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_PSO_OPC/safe000.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe000_PSO_OPC/test.desc new file mode 100644 index 00000000000..740a93b35fd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe000_PSO_OPT/safe000.c b/regression/goto-instrument-wmm-core/x86_safe000_PSO_OPT/safe000.c new file mode 100644 index 00000000000..3772b2e83af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_PSO_OPT/safe000.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe000_PSO_OPT/test.desc new file mode 100644 index 00000000000..11549c7ee2c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe000.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe000_RMO_ALL/safe000.c b/regression/goto-instrument-wmm-core/x86_safe000_RMO_ALL/safe000.c new file mode 100644 index 00000000000..3772b2e83af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_RMO_ALL/safe000.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe000_RMO_ALL/test.desc new file mode 100644 index 00000000000..f56e5b42e25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe000.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe000_RMO_OPC/safe000.c b/regression/goto-instrument-wmm-core/x86_safe000_RMO_OPC/safe000.c new file mode 100644 index 00000000000..3772b2e83af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_RMO_OPC/safe000.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe000_RMO_OPC/test.desc new file mode 100644 index 00000000000..79ffb695c1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe000_RMO_OPT/safe000.c b/regression/goto-instrument-wmm-core/x86_safe000_RMO_OPT/safe000.c new file mode 100644 index 00000000000..3772b2e83af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_RMO_OPT/safe000.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe000_RMO_OPT/test.desc new file mode 100644 index 00000000000..0aec0d6756f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe000.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe000_SC_SAFE/safe000.c b/regression/goto-instrument-wmm-core/x86_safe000_SC_SAFE/safe000.c new file mode 100644 index 00000000000..3772b2e83af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_SC_SAFE/safe000.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe000_SC_SAFE/test.desc new file mode 100644 index 00000000000..7f5a08d84b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe000_TSO_ALL/safe000.c b/regression/goto-instrument-wmm-core/x86_safe000_TSO_ALL/safe000.c new file mode 100644 index 00000000000..3772b2e83af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_TSO_ALL/safe000.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe000_TSO_ALL/test.desc new file mode 100644 index 00000000000..1f392bc20dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe000_TSO_OPC/safe000.c b/regression/goto-instrument-wmm-core/x86_safe000_TSO_OPC/safe000.c new file mode 100644 index 00000000000..3772b2e83af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_TSO_OPC/safe000.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe000_TSO_OPC/test.desc new file mode 100644 index 00000000000..381fb6e6ff1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe000.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe000_TSO_OPT/safe000.c b/regression/goto-instrument-wmm-core/x86_safe000_TSO_OPT/safe000.c new file mode 100644 index 00000000000..3772b2e83af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_TSO_OPT/safe000.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe000_TSO_OPT/test.desc new file mode 100644 index 00000000000..5100ea476ec --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe000.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe001_CAV11_ERROR/safe001.c b/regression/goto-instrument-wmm-core/x86_safe001_CAV11_ERROR/safe001.c new file mode 100644 index 00000000000..53e8729d818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_CAV11_ERROR/safe001.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe001_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe001_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..b3180f789af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe001_POWER_ALL/safe001.c b/regression/goto-instrument-wmm-core/x86_safe001_POWER_ALL/safe001.c new file mode 100644 index 00000000000..53e8729d818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_POWER_ALL/safe001.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe001_POWER_ALL/test.desc new file mode 100644 index 00000000000..1923c905842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe001_POWER_OPC/safe001.c b/regression/goto-instrument-wmm-core/x86_safe001_POWER_OPC/safe001.c new file mode 100644 index 00000000000..53e8729d818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_POWER_OPC/safe001.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe001_POWER_OPC/test.desc new file mode 100644 index 00000000000..d0fc35b69ce --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe001_POWER_OPT/safe001.c b/regression/goto-instrument-wmm-core/x86_safe001_POWER_OPT/safe001.c new file mode 100644 index 00000000000..53e8729d818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_POWER_OPT/safe001.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe001_POWER_OPT/test.desc new file mode 100644 index 00000000000..6709ff0ce61 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe001.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe001_PSO_ALL/safe001.c b/regression/goto-instrument-wmm-core/x86_safe001_PSO_ALL/safe001.c new file mode 100644 index 00000000000..53e8729d818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_PSO_ALL/safe001.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe001_PSO_ALL/test.desc new file mode 100644 index 00000000000..d185ff3f61f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe001_PSO_OPC/safe001.c b/regression/goto-instrument-wmm-core/x86_safe001_PSO_OPC/safe001.c new file mode 100644 index 00000000000..53e8729d818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_PSO_OPC/safe001.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe001_PSO_OPC/test.desc new file mode 100644 index 00000000000..da582670cf5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe001_PSO_OPT/safe001.c b/regression/goto-instrument-wmm-core/x86_safe001_PSO_OPT/safe001.c new file mode 100644 index 00000000000..53e8729d818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_PSO_OPT/safe001.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe001_PSO_OPT/test.desc new file mode 100644 index 00000000000..19ac798bfb4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe001.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe001_RMO_ALL/safe001.c b/regression/goto-instrument-wmm-core/x86_safe001_RMO_ALL/safe001.c new file mode 100644 index 00000000000..53e8729d818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_RMO_ALL/safe001.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe001_RMO_ALL/test.desc new file mode 100644 index 00000000000..c7c2f41562a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe001_RMO_OPC/safe001.c b/regression/goto-instrument-wmm-core/x86_safe001_RMO_OPC/safe001.c new file mode 100644 index 00000000000..53e8729d818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_RMO_OPC/safe001.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe001_RMO_OPC/test.desc new file mode 100644 index 00000000000..37697b7c053 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe001_RMO_OPT/safe001.c b/regression/goto-instrument-wmm-core/x86_safe001_RMO_OPT/safe001.c new file mode 100644 index 00000000000..53e8729d818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_RMO_OPT/safe001.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe001_RMO_OPT/test.desc new file mode 100644 index 00000000000..f7683b7ed4b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe001.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe001_SC_SAFE/safe001.c b/regression/goto-instrument-wmm-core/x86_safe001_SC_SAFE/safe001.c new file mode 100644 index 00000000000..53e8729d818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_SC_SAFE/safe001.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe001_SC_SAFE/test.desc new file mode 100644 index 00000000000..00e3393cb17 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe001_TSO_ALL/safe001.c b/regression/goto-instrument-wmm-core/x86_safe001_TSO_ALL/safe001.c new file mode 100644 index 00000000000..53e8729d818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_TSO_ALL/safe001.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe001_TSO_ALL/test.desc new file mode 100644 index 00000000000..a1c5513238a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe001_TSO_OPC/safe001.c b/regression/goto-instrument-wmm-core/x86_safe001_TSO_OPC/safe001.c new file mode 100644 index 00000000000..53e8729d818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_TSO_OPC/safe001.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe001_TSO_OPC/test.desc new file mode 100644 index 00000000000..74ff0246456 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe001.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe001_TSO_OPT/safe001.c b/regression/goto-instrument-wmm-core/x86_safe001_TSO_OPT/safe001.c new file mode 100644 index 00000000000..53e8729d818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_TSO_OPT/safe001.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe001_TSO_OPT/test.desc new file mode 100644 index 00000000000..a1bba8a2ac9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe001.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe002_CAV11_ERROR/safe002.c b/regression/goto-instrument-wmm-core/x86_safe002_CAV11_ERROR/safe002.c new file mode 100644 index 00000000000..a2aadd8b169 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_CAV11_ERROR/safe002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe002_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe002_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..7bca60e1e70 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe002.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe002_POWER_ALL/safe002.c b/regression/goto-instrument-wmm-core/x86_safe002_POWER_ALL/safe002.c new file mode 100644 index 00000000000..a2aadd8b169 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_POWER_ALL/safe002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe002_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe002_POWER_ALL/test.desc new file mode 100644 index 00000000000..061aceec79e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe002.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe002_POWER_OPC/safe002.c b/regression/goto-instrument-wmm-core/x86_safe002_POWER_OPC/safe002.c new file mode 100644 index 00000000000..a2aadd8b169 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_POWER_OPC/safe002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe002_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe002_POWER_OPC/test.desc new file mode 100644 index 00000000000..546d92a71b5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe002.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe002_POWER_OPT/safe002.c b/regression/goto-instrument-wmm-core/x86_safe002_POWER_OPT/safe002.c new file mode 100644 index 00000000000..a2aadd8b169 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_POWER_OPT/safe002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe002_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe002_POWER_OPT/test.desc new file mode 100644 index 00000000000..9a24844d6a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe002.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe002_PSO_ALL/safe002.c b/regression/goto-instrument-wmm-core/x86_safe002_PSO_ALL/safe002.c new file mode 100644 index 00000000000..a2aadd8b169 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_PSO_ALL/safe002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe002_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe002_PSO_ALL/test.desc new file mode 100644 index 00000000000..1d5afaf864e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe002.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe002_PSO_OPC/safe002.c b/regression/goto-instrument-wmm-core/x86_safe002_PSO_OPC/safe002.c new file mode 100644 index 00000000000..a2aadd8b169 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_PSO_OPC/safe002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe002_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe002_PSO_OPC/test.desc new file mode 100644 index 00000000000..5b1e8ceb9ff --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe002.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe002_PSO_OPT/safe002.c b/regression/goto-instrument-wmm-core/x86_safe002_PSO_OPT/safe002.c new file mode 100644 index 00000000000..a2aadd8b169 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_PSO_OPT/safe002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe002_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe002_PSO_OPT/test.desc new file mode 100644 index 00000000000..61be0e6588b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe002.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe002_RMO_ALL/safe002.c b/regression/goto-instrument-wmm-core/x86_safe002_RMO_ALL/safe002.c new file mode 100644 index 00000000000..a2aadd8b169 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_RMO_ALL/safe002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe002_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe002_RMO_ALL/test.desc new file mode 100644 index 00000000000..832e09f6801 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe002.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe002_RMO_OPC/safe002.c b/regression/goto-instrument-wmm-core/x86_safe002_RMO_OPC/safe002.c new file mode 100644 index 00000000000..a2aadd8b169 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_RMO_OPC/safe002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe002_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe002_RMO_OPC/test.desc new file mode 100644 index 00000000000..42c1979165c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe002.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe002_RMO_OPT/safe002.c b/regression/goto-instrument-wmm-core/x86_safe002_RMO_OPT/safe002.c new file mode 100644 index 00000000000..a2aadd8b169 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_RMO_OPT/safe002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe002_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe002_RMO_OPT/test.desc new file mode 100644 index 00000000000..280cfba0e97 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe002.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe002_SC_SAFE/safe002.c b/regression/goto-instrument-wmm-core/x86_safe002_SC_SAFE/safe002.c new file mode 100644 index 00000000000..a2aadd8b169 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_SC_SAFE/safe002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe002_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe002_SC_SAFE/test.desc new file mode 100644 index 00000000000..a0714c10c4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe002.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe002_TSO_ALL/safe002.c b/regression/goto-instrument-wmm-core/x86_safe002_TSO_ALL/safe002.c new file mode 100644 index 00000000000..a2aadd8b169 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_TSO_ALL/safe002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe002_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe002_TSO_ALL/test.desc new file mode 100644 index 00000000000..3995a8be134 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe002.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe002_TSO_OPC/safe002.c b/regression/goto-instrument-wmm-core/x86_safe002_TSO_OPC/safe002.c new file mode 100644 index 00000000000..a2aadd8b169 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_TSO_OPC/safe002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe002_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe002_TSO_OPC/test.desc new file mode 100644 index 00000000000..7903502fad4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe002.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe002_TSO_OPT/safe002.c b/regression/goto-instrument-wmm-core/x86_safe002_TSO_OPT/safe002.c new file mode 100644 index 00000000000..a2aadd8b169 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_TSO_OPT/safe002.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe002_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe002_TSO_OPT/test.desc new file mode 100644 index 00000000000..29e63a335b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe002_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe002.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe003_CAV11_ERROR/safe003.c b/regression/goto-instrument-wmm-core/x86_safe003_CAV11_ERROR/safe003.c new file mode 100644 index 00000000000..1a8362250dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_CAV11_ERROR/safe003.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe003_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe003_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..8fba9f4937b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe003.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe003_POWER_ALL/safe003.c b/regression/goto-instrument-wmm-core/x86_safe003_POWER_ALL/safe003.c new file mode 100644 index 00000000000..1a8362250dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_POWER_ALL/safe003.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe003_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe003_POWER_ALL/test.desc new file mode 100644 index 00000000000..fcc3822c635 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe003.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe003_POWER_OPC/safe003.c b/regression/goto-instrument-wmm-core/x86_safe003_POWER_OPC/safe003.c new file mode 100644 index 00000000000..1a8362250dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_POWER_OPC/safe003.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe003_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe003_POWER_OPC/test.desc new file mode 100644 index 00000000000..76b44322674 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe003.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe003_POWER_OPT/safe003.c b/regression/goto-instrument-wmm-core/x86_safe003_POWER_OPT/safe003.c new file mode 100644 index 00000000000..1a8362250dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_POWER_OPT/safe003.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe003_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe003_POWER_OPT/test.desc new file mode 100644 index 00000000000..c6c0b6c92ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe003.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe003_PSO_ALL/safe003.c b/regression/goto-instrument-wmm-core/x86_safe003_PSO_ALL/safe003.c new file mode 100644 index 00000000000..1a8362250dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_PSO_ALL/safe003.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe003_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe003_PSO_ALL/test.desc new file mode 100644 index 00000000000..85b1ab80207 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe003.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe003_PSO_OPC/safe003.c b/regression/goto-instrument-wmm-core/x86_safe003_PSO_OPC/safe003.c new file mode 100644 index 00000000000..1a8362250dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_PSO_OPC/safe003.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe003_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe003_PSO_OPC/test.desc new file mode 100644 index 00000000000..8af95a0706b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe003.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe003_PSO_OPT/safe003.c b/regression/goto-instrument-wmm-core/x86_safe003_PSO_OPT/safe003.c new file mode 100644 index 00000000000..1a8362250dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_PSO_OPT/safe003.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe003_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe003_PSO_OPT/test.desc new file mode 100644 index 00000000000..18366460d00 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe003.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe003_RMO_ALL/safe003.c b/regression/goto-instrument-wmm-core/x86_safe003_RMO_ALL/safe003.c new file mode 100644 index 00000000000..1a8362250dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_RMO_ALL/safe003.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe003_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe003_RMO_ALL/test.desc new file mode 100644 index 00000000000..b999981fafc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe003.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe003_RMO_OPC/safe003.c b/regression/goto-instrument-wmm-core/x86_safe003_RMO_OPC/safe003.c new file mode 100644 index 00000000000..1a8362250dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_RMO_OPC/safe003.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe003_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe003_RMO_OPC/test.desc new file mode 100644 index 00000000000..a7c9b27cf94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe003.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe003_RMO_OPT/safe003.c b/regression/goto-instrument-wmm-core/x86_safe003_RMO_OPT/safe003.c new file mode 100644 index 00000000000..1a8362250dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_RMO_OPT/safe003.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe003_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe003_RMO_OPT/test.desc new file mode 100644 index 00000000000..5aa21e1bd6f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe003.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe003_SC_SAFE/safe003.c b/regression/goto-instrument-wmm-core/x86_safe003_SC_SAFE/safe003.c new file mode 100644 index 00000000000..1a8362250dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_SC_SAFE/safe003.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe003_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe003_SC_SAFE/test.desc new file mode 100644 index 00000000000..5d6ccdca18a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe003.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe003_TSO_ALL/safe003.c b/regression/goto-instrument-wmm-core/x86_safe003_TSO_ALL/safe003.c new file mode 100644 index 00000000000..1a8362250dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_TSO_ALL/safe003.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe003_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe003_TSO_ALL/test.desc new file mode 100644 index 00000000000..c2852aa117f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe003.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe003_TSO_OPC/safe003.c b/regression/goto-instrument-wmm-core/x86_safe003_TSO_OPC/safe003.c new file mode 100644 index 00000000000..1a8362250dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_TSO_OPC/safe003.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe003_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe003_TSO_OPC/test.desc new file mode 100644 index 00000000000..6035587c3e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe003.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe003_TSO_OPT/safe003.c b/regression/goto-instrument-wmm-core/x86_safe003_TSO_OPT/safe003.c new file mode 100644 index 00000000000..1a8362250dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_TSO_OPT/safe003.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe003_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe003_TSO_OPT/test.desc new file mode 100644 index 00000000000..7f0378eaca4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe003_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe003.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe004_CAV11_ERROR/safe004.c b/regression/goto-instrument-wmm-core/x86_safe004_CAV11_ERROR/safe004.c new file mode 100644 index 00000000000..1ac0021dcc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_CAV11_ERROR/safe004.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe004_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe004_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..cbbcb22336f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe004.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe004_POWER_ALL/safe004.c b/regression/goto-instrument-wmm-core/x86_safe004_POWER_ALL/safe004.c new file mode 100644 index 00000000000..1ac0021dcc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_POWER_ALL/safe004.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe004_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe004_POWER_ALL/test.desc new file mode 100644 index 00000000000..03cfd8bac42 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe004.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe004_POWER_OPC/safe004.c b/regression/goto-instrument-wmm-core/x86_safe004_POWER_OPC/safe004.c new file mode 100644 index 00000000000..1ac0021dcc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_POWER_OPC/safe004.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe004_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe004_POWER_OPC/test.desc new file mode 100644 index 00000000000..ba67cf3f6ae --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe004.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe004_POWER_OPT/safe004.c b/regression/goto-instrument-wmm-core/x86_safe004_POWER_OPT/safe004.c new file mode 100644 index 00000000000..1ac0021dcc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_POWER_OPT/safe004.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe004_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe004_POWER_OPT/test.desc new file mode 100644 index 00000000000..079c6958587 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe004.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe004_PSO_ALL/safe004.c b/regression/goto-instrument-wmm-core/x86_safe004_PSO_ALL/safe004.c new file mode 100644 index 00000000000..1ac0021dcc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_PSO_ALL/safe004.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe004_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe004_PSO_ALL/test.desc new file mode 100644 index 00000000000..d5f9635b691 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe004.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe004_PSO_OPC/safe004.c b/regression/goto-instrument-wmm-core/x86_safe004_PSO_OPC/safe004.c new file mode 100644 index 00000000000..1ac0021dcc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_PSO_OPC/safe004.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe004_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe004_PSO_OPC/test.desc new file mode 100644 index 00000000000..083366841c1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe004.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe004_PSO_OPT/safe004.c b/regression/goto-instrument-wmm-core/x86_safe004_PSO_OPT/safe004.c new file mode 100644 index 00000000000..1ac0021dcc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_PSO_OPT/safe004.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe004_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe004_PSO_OPT/test.desc new file mode 100644 index 00000000000..89cbaf96c49 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe004.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe004_RMO_ALL/safe004.c b/regression/goto-instrument-wmm-core/x86_safe004_RMO_ALL/safe004.c new file mode 100644 index 00000000000..1ac0021dcc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_RMO_ALL/safe004.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe004_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe004_RMO_ALL/test.desc new file mode 100644 index 00000000000..38c26c34803 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe004.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe004_RMO_OPC/safe004.c b/regression/goto-instrument-wmm-core/x86_safe004_RMO_OPC/safe004.c new file mode 100644 index 00000000000..1ac0021dcc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_RMO_OPC/safe004.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe004_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe004_RMO_OPC/test.desc new file mode 100644 index 00000000000..77447d31eb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe004.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe004_RMO_OPT/safe004.c b/regression/goto-instrument-wmm-core/x86_safe004_RMO_OPT/safe004.c new file mode 100644 index 00000000000..1ac0021dcc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_RMO_OPT/safe004.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe004_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe004_RMO_OPT/test.desc new file mode 100644 index 00000000000..9e745fd6baf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe004.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe004_SC_SAFE/safe004.c b/regression/goto-instrument-wmm-core/x86_safe004_SC_SAFE/safe004.c new file mode 100644 index 00000000000..1ac0021dcc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_SC_SAFE/safe004.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe004_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe004_SC_SAFE/test.desc new file mode 100644 index 00000000000..ebf2da333db --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe004.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe004_TSO_ALL/safe004.c b/regression/goto-instrument-wmm-core/x86_safe004_TSO_ALL/safe004.c new file mode 100644 index 00000000000..1ac0021dcc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_TSO_ALL/safe004.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe004_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe004_TSO_ALL/test.desc new file mode 100644 index 00000000000..18264c60b31 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe004.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe004_TSO_OPC/safe004.c b/regression/goto-instrument-wmm-core/x86_safe004_TSO_OPC/safe004.c new file mode 100644 index 00000000000..1ac0021dcc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_TSO_OPC/safe004.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe004_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe004_TSO_OPC/test.desc new file mode 100644 index 00000000000..1cee8628380 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe004.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe004_TSO_OPT/safe004.c b/regression/goto-instrument-wmm-core/x86_safe004_TSO_OPT/safe004.c new file mode 100644 index 00000000000..1ac0021dcc6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_TSO_OPT/safe004.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe004_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe004_TSO_OPT/test.desc new file mode 100644 index 00000000000..57b1732d750 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe004_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe004.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe005_CAV11_ERROR/safe005.c b/regression/goto-instrument-wmm-core/x86_safe005_CAV11_ERROR/safe005.c new file mode 100644 index 00000000000..8a1131ed774 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_CAV11_ERROR/safe005.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe005_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe005_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..0970502dc68 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe005_POWER_ALL/safe005.c b/regression/goto-instrument-wmm-core/x86_safe005_POWER_ALL/safe005.c new file mode 100644 index 00000000000..8a1131ed774 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_POWER_ALL/safe005.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe005_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe005_POWER_ALL/test.desc new file mode 100644 index 00000000000..56f63ce71c4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe005.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe005_POWER_OPC/safe005.c b/regression/goto-instrument-wmm-core/x86_safe005_POWER_OPC/safe005.c new file mode 100644 index 00000000000..8a1131ed774 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_POWER_OPC/safe005.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe005_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe005_POWER_OPC/test.desc new file mode 100644 index 00000000000..bbb2a4baa90 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe005_POWER_OPT/safe005.c b/regression/goto-instrument-wmm-core/x86_safe005_POWER_OPT/safe005.c new file mode 100644 index 00000000000..8a1131ed774 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_POWER_OPT/safe005.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe005_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe005_POWER_OPT/test.desc new file mode 100644 index 00000000000..89592c71145 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe005.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe005_PSO_ALL/safe005.c b/regression/goto-instrument-wmm-core/x86_safe005_PSO_ALL/safe005.c new file mode 100644 index 00000000000..8a1131ed774 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_PSO_ALL/safe005.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe005_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe005_PSO_ALL/test.desc new file mode 100644 index 00000000000..7a3c1be86df --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe005_PSO_OPC/safe005.c b/regression/goto-instrument-wmm-core/x86_safe005_PSO_OPC/safe005.c new file mode 100644 index 00000000000..8a1131ed774 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_PSO_OPC/safe005.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe005_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe005_PSO_OPC/test.desc new file mode 100644 index 00000000000..d5dc4b095b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe005_PSO_OPT/safe005.c b/regression/goto-instrument-wmm-core/x86_safe005_PSO_OPT/safe005.c new file mode 100644 index 00000000000..8a1131ed774 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_PSO_OPT/safe005.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe005_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe005_PSO_OPT/test.desc new file mode 100644 index 00000000000..d2bdc807267 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe005.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe005_RMO_ALL/safe005.c b/regression/goto-instrument-wmm-core/x86_safe005_RMO_ALL/safe005.c new file mode 100644 index 00000000000..8a1131ed774 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_RMO_ALL/safe005.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe005_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe005_RMO_ALL/test.desc new file mode 100644 index 00000000000..c457f14b6db --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe005_RMO_OPC/safe005.c b/regression/goto-instrument-wmm-core/x86_safe005_RMO_OPC/safe005.c new file mode 100644 index 00000000000..8a1131ed774 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_RMO_OPC/safe005.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe005_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe005_RMO_OPC/test.desc new file mode 100644 index 00000000000..54596e6ade7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe005_RMO_OPT/safe005.c b/regression/goto-instrument-wmm-core/x86_safe005_RMO_OPT/safe005.c new file mode 100644 index 00000000000..8a1131ed774 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_RMO_OPT/safe005.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe005_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe005_RMO_OPT/test.desc new file mode 100644 index 00000000000..ea774cad0b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe005.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe005_SC_SAFE/safe005.c b/regression/goto-instrument-wmm-core/x86_safe005_SC_SAFE/safe005.c new file mode 100644 index 00000000000..8a1131ed774 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_SC_SAFE/safe005.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe005_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe005_SC_SAFE/test.desc new file mode 100644 index 00000000000..4377b3d1fb4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe005_TSO_ALL/safe005.c b/regression/goto-instrument-wmm-core/x86_safe005_TSO_ALL/safe005.c new file mode 100644 index 00000000000..8a1131ed774 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_TSO_ALL/safe005.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe005_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe005_TSO_ALL/test.desc new file mode 100644 index 00000000000..dcb5104ad55 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe005_TSO_OPC/safe005.c b/regression/goto-instrument-wmm-core/x86_safe005_TSO_OPC/safe005.c new file mode 100644 index 00000000000..8a1131ed774 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_TSO_OPC/safe005.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe005_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe005_TSO_OPC/test.desc new file mode 100644 index 00000000000..ba7c2c92276 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe005.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe005_TSO_OPT/safe005.c b/regression/goto-instrument-wmm-core/x86_safe005_TSO_OPT/safe005.c new file mode 100644 index 00000000000..8a1131ed774 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_TSO_OPT/safe005.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe005_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe005_TSO_OPT/test.desc new file mode 100644 index 00000000000..e82ea5b9069 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe005_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe005.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe006_CAV11_SAFE/safe006.c b/regression/goto-instrument-wmm-core/x86_safe006_CAV11_SAFE/safe006.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_CAV11_SAFE/safe006.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe006_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe006_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..3770855cc3a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe006_POWER_ALL/safe006.c b/regression/goto-instrument-wmm-core/x86_safe006_POWER_ALL/safe006.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_POWER_ALL/safe006.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe006_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe006_POWER_ALL/test.desc new file mode 100644 index 00000000000..8be9bff8fac --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe006_POWER_OPC/safe006.c b/regression/goto-instrument-wmm-core/x86_safe006_POWER_OPC/safe006.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_POWER_OPC/safe006.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe006_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe006_POWER_OPC/test.desc new file mode 100644 index 00000000000..a161801743b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe006_POWER_OPT/safe006.c b/regression/goto-instrument-wmm-core/x86_safe006_POWER_OPT/safe006.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_POWER_OPT/safe006.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe006_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe006_POWER_OPT/test.desc new file mode 100644 index 00000000000..a9c6daeff75 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe006.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe006_PSO_ALL/safe006.c b/regression/goto-instrument-wmm-core/x86_safe006_PSO_ALL/safe006.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_PSO_ALL/safe006.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe006_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe006_PSO_ALL/test.desc new file mode 100644 index 00000000000..936907e3396 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe006_PSO_OPC/safe006.c b/regression/goto-instrument-wmm-core/x86_safe006_PSO_OPC/safe006.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_PSO_OPC/safe006.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe006_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe006_PSO_OPC/test.desc new file mode 100644 index 00000000000..254519c665b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe006_PSO_OPT/safe006.c b/regression/goto-instrument-wmm-core/x86_safe006_PSO_OPT/safe006.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_PSO_OPT/safe006.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe006_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe006_PSO_OPT/test.desc new file mode 100644 index 00000000000..5f5e9dd5526 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe006.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe006_RMO_ALL/safe006.c b/regression/goto-instrument-wmm-core/x86_safe006_RMO_ALL/safe006.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_RMO_ALL/safe006.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe006_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe006_RMO_ALL/test.desc new file mode 100644 index 00000000000..2397a26c114 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe006_RMO_OPC/safe006.c b/regression/goto-instrument-wmm-core/x86_safe006_RMO_OPC/safe006.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_RMO_OPC/safe006.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe006_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe006_RMO_OPC/test.desc new file mode 100644 index 00000000000..5789026f2ee --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe006_RMO_OPT/safe006.c b/regression/goto-instrument-wmm-core/x86_safe006_RMO_OPT/safe006.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_RMO_OPT/safe006.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe006_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe006_RMO_OPT/test.desc new file mode 100644 index 00000000000..3ae971b145c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe006.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe006_SC_SAFE/safe006.c b/regression/goto-instrument-wmm-core/x86_safe006_SC_SAFE/safe006.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_SC_SAFE/safe006.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe006_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe006_SC_SAFE/test.desc new file mode 100644 index 00000000000..3a0ae9d52e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe006_TSO_ALL/safe006.c b/regression/goto-instrument-wmm-core/x86_safe006_TSO_ALL/safe006.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_TSO_ALL/safe006.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe006_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe006_TSO_ALL/test.desc new file mode 100644 index 00000000000..bbacf66a898 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe006_TSO_OPC/safe006.c b/regression/goto-instrument-wmm-core/x86_safe006_TSO_OPC/safe006.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_TSO_OPC/safe006.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe006_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe006_TSO_OPC/test.desc new file mode 100644 index 00000000000..7935b056c3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe006.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe006_TSO_OPT/safe006.c b/regression/goto-instrument-wmm-core/x86_safe006_TSO_OPT/safe006.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_TSO_OPT/safe006.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe006_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe006_TSO_OPT/test.desc new file mode 100644 index 00000000000..f7fc449e498 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe006_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe006.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe007_CAV11_SAFE/safe007.c b/regression/goto-instrument-wmm-core/x86_safe007_CAV11_SAFE/safe007.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_CAV11_SAFE/safe007.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe007_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe007_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..3fec95d3f87 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe007.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe007_POWER_ALL/safe007.c b/regression/goto-instrument-wmm-core/x86_safe007_POWER_ALL/safe007.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_POWER_ALL/safe007.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe007_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe007_POWER_ALL/test.desc new file mode 100644 index 00000000000..fd5b0e7fd52 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe007.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe007_POWER_OPC/safe007.c b/regression/goto-instrument-wmm-core/x86_safe007_POWER_OPC/safe007.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_POWER_OPC/safe007.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe007_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe007_POWER_OPC/test.desc new file mode 100644 index 00000000000..180c63eb259 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe007.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe007_POWER_OPT/safe007.c b/regression/goto-instrument-wmm-core/x86_safe007_POWER_OPT/safe007.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_POWER_OPT/safe007.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe007_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe007_POWER_OPT/test.desc new file mode 100644 index 00000000000..4b055fd5b89 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe007.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe007_PSO_ALL/safe007.c b/regression/goto-instrument-wmm-core/x86_safe007_PSO_ALL/safe007.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_PSO_ALL/safe007.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe007_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe007_PSO_ALL/test.desc new file mode 100644 index 00000000000..936757099ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe007.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe007_PSO_OPC/safe007.c b/regression/goto-instrument-wmm-core/x86_safe007_PSO_OPC/safe007.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_PSO_OPC/safe007.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe007_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe007_PSO_OPC/test.desc new file mode 100644 index 00000000000..8f6972156cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe007.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe007_PSO_OPT/safe007.c b/regression/goto-instrument-wmm-core/x86_safe007_PSO_OPT/safe007.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_PSO_OPT/safe007.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe007_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe007_PSO_OPT/test.desc new file mode 100644 index 00000000000..a1a9eabd4c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe007.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe007_RMO_ALL/safe007.c b/regression/goto-instrument-wmm-core/x86_safe007_RMO_ALL/safe007.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_RMO_ALL/safe007.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe007_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe007_RMO_ALL/test.desc new file mode 100644 index 00000000000..1bbf0b0aa29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe007.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe007_RMO_OPC/safe007.c b/regression/goto-instrument-wmm-core/x86_safe007_RMO_OPC/safe007.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_RMO_OPC/safe007.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe007_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe007_RMO_OPC/test.desc new file mode 100644 index 00000000000..d84cedec75f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe007.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe007_RMO_OPT/safe007.c b/regression/goto-instrument-wmm-core/x86_safe007_RMO_OPT/safe007.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_RMO_OPT/safe007.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe007_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe007_RMO_OPT/test.desc new file mode 100644 index 00000000000..0c6d4eba522 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe007.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe007_SC_SAFE/safe007.c b/regression/goto-instrument-wmm-core/x86_safe007_SC_SAFE/safe007.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_SC_SAFE/safe007.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe007_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe007_SC_SAFE/test.desc new file mode 100644 index 00000000000..64ac0c24b0a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe007.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe007_TSO_ALL/safe007.c b/regression/goto-instrument-wmm-core/x86_safe007_TSO_ALL/safe007.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_TSO_ALL/safe007.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe007_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe007_TSO_ALL/test.desc new file mode 100644 index 00000000000..74bdb95c852 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe007.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe007_TSO_OPC/safe007.c b/regression/goto-instrument-wmm-core/x86_safe007_TSO_OPC/safe007.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_TSO_OPC/safe007.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe007_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe007_TSO_OPC/test.desc new file mode 100644 index 00000000000..bea1320947b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe007.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe007_TSO_OPT/safe007.c b/regression/goto-instrument-wmm-core/x86_safe007_TSO_OPT/safe007.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_TSO_OPT/safe007.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe007_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe007_TSO_OPT/test.desc new file mode 100644 index 00000000000..ca2ef67fd1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe007_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe007.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe008_CAV11_ERROR/safe008.c b/regression/goto-instrument-wmm-core/x86_safe008_CAV11_ERROR/safe008.c new file mode 100644 index 00000000000..763a8198043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_CAV11_ERROR/safe008.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe008_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe008_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..8d8cb1faf0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe008.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe008_POWER_ALL/safe008.c b/regression/goto-instrument-wmm-core/x86_safe008_POWER_ALL/safe008.c new file mode 100644 index 00000000000..763a8198043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_POWER_ALL/safe008.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe008_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe008_POWER_ALL/test.desc new file mode 100644 index 00000000000..0b91391a888 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe008.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe008_POWER_OPC/safe008.c b/regression/goto-instrument-wmm-core/x86_safe008_POWER_OPC/safe008.c new file mode 100644 index 00000000000..763a8198043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_POWER_OPC/safe008.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe008_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe008_POWER_OPC/test.desc new file mode 100644 index 00000000000..647a957f171 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe008.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe008_POWER_OPT/safe008.c b/regression/goto-instrument-wmm-core/x86_safe008_POWER_OPT/safe008.c new file mode 100644 index 00000000000..763a8198043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_POWER_OPT/safe008.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe008_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe008_POWER_OPT/test.desc new file mode 100644 index 00000000000..70be334fe8c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe008.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe008_PSO_ALL/safe008.c b/regression/goto-instrument-wmm-core/x86_safe008_PSO_ALL/safe008.c new file mode 100644 index 00000000000..763a8198043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_PSO_ALL/safe008.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe008_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe008_PSO_ALL/test.desc new file mode 100644 index 00000000000..d402c5bebe1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe008.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe008_PSO_OPC/safe008.c b/regression/goto-instrument-wmm-core/x86_safe008_PSO_OPC/safe008.c new file mode 100644 index 00000000000..763a8198043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_PSO_OPC/safe008.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe008_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe008_PSO_OPC/test.desc new file mode 100644 index 00000000000..127546725a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe008.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe008_PSO_OPT/safe008.c b/regression/goto-instrument-wmm-core/x86_safe008_PSO_OPT/safe008.c new file mode 100644 index 00000000000..763a8198043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_PSO_OPT/safe008.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe008_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe008_PSO_OPT/test.desc new file mode 100644 index 00000000000..ca8ccf1628d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe008.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe008_RMO_ALL/safe008.c b/regression/goto-instrument-wmm-core/x86_safe008_RMO_ALL/safe008.c new file mode 100644 index 00000000000..763a8198043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_RMO_ALL/safe008.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe008_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe008_RMO_ALL/test.desc new file mode 100644 index 00000000000..5477f093687 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe008.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe008_RMO_OPC/safe008.c b/regression/goto-instrument-wmm-core/x86_safe008_RMO_OPC/safe008.c new file mode 100644 index 00000000000..763a8198043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_RMO_OPC/safe008.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe008_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe008_RMO_OPC/test.desc new file mode 100644 index 00000000000..84dabcb524d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe008.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe008_RMO_OPT/safe008.c b/regression/goto-instrument-wmm-core/x86_safe008_RMO_OPT/safe008.c new file mode 100644 index 00000000000..763a8198043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_RMO_OPT/safe008.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe008_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe008_RMO_OPT/test.desc new file mode 100644 index 00000000000..3a46182aaad --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe008.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe008_SC_SAFE/safe008.c b/regression/goto-instrument-wmm-core/x86_safe008_SC_SAFE/safe008.c new file mode 100644 index 00000000000..763a8198043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_SC_SAFE/safe008.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe008_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe008_SC_SAFE/test.desc new file mode 100644 index 00000000000..fa0cf1271f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe008.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe008_TSO_ALL/safe008.c b/regression/goto-instrument-wmm-core/x86_safe008_TSO_ALL/safe008.c new file mode 100644 index 00000000000..763a8198043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_TSO_ALL/safe008.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe008_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe008_TSO_ALL/test.desc new file mode 100644 index 00000000000..112c7cb6695 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe008.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe008_TSO_OPC/safe008.c b/regression/goto-instrument-wmm-core/x86_safe008_TSO_OPC/safe008.c new file mode 100644 index 00000000000..763a8198043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_TSO_OPC/safe008.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe008_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe008_TSO_OPC/test.desc new file mode 100644 index 00000000000..9847607774e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe008.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe008_TSO_OPT/safe008.c b/regression/goto-instrument-wmm-core/x86_safe008_TSO_OPT/safe008.c new file mode 100644 index 00000000000..763a8198043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_TSO_OPT/safe008.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p1_EAX == 1 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe008_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe008_TSO_OPT/test.desc new file mode 100644 index 00000000000..05b97e56552 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe008_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe008.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe009_CAV11_ERROR/safe009.c b/regression/goto-instrument-wmm-core/x86_safe009_CAV11_ERROR/safe009.c new file mode 100644 index 00000000000..c3ecc77fdd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_CAV11_ERROR/safe009.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe009_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe009_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..246406d5bf1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe009.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe009_POWER_ALL/safe009.c b/regression/goto-instrument-wmm-core/x86_safe009_POWER_ALL/safe009.c new file mode 100644 index 00000000000..c3ecc77fdd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_POWER_ALL/safe009.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe009_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe009_POWER_ALL/test.desc new file mode 100644 index 00000000000..6a97e728b91 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe009.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe009_POWER_OPC/safe009.c b/regression/goto-instrument-wmm-core/x86_safe009_POWER_OPC/safe009.c new file mode 100644 index 00000000000..c3ecc77fdd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_POWER_OPC/safe009.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe009_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe009_POWER_OPC/test.desc new file mode 100644 index 00000000000..09208c256a3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe009.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe009_POWER_OPT/safe009.c b/regression/goto-instrument-wmm-core/x86_safe009_POWER_OPT/safe009.c new file mode 100644 index 00000000000..c3ecc77fdd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_POWER_OPT/safe009.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe009_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe009_POWER_OPT/test.desc new file mode 100644 index 00000000000..898ba1386af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe009.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe009_PSO_ALL/safe009.c b/regression/goto-instrument-wmm-core/x86_safe009_PSO_ALL/safe009.c new file mode 100644 index 00000000000..c3ecc77fdd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_PSO_ALL/safe009.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe009_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe009_PSO_ALL/test.desc new file mode 100644 index 00000000000..6ad04f65020 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe009.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe009_PSO_OPC/safe009.c b/regression/goto-instrument-wmm-core/x86_safe009_PSO_OPC/safe009.c new file mode 100644 index 00000000000..c3ecc77fdd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_PSO_OPC/safe009.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe009_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe009_PSO_OPC/test.desc new file mode 100644 index 00000000000..d02a3eea5df --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe009.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe009_PSO_OPT/safe009.c b/regression/goto-instrument-wmm-core/x86_safe009_PSO_OPT/safe009.c new file mode 100644 index 00000000000..c3ecc77fdd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_PSO_OPT/safe009.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe009_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe009_PSO_OPT/test.desc new file mode 100644 index 00000000000..2edf34f9757 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe009.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe009_RMO_ALL/safe009.c b/regression/goto-instrument-wmm-core/x86_safe009_RMO_ALL/safe009.c new file mode 100644 index 00000000000..c3ecc77fdd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_RMO_ALL/safe009.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe009_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe009_RMO_ALL/test.desc new file mode 100644 index 00000000000..755638360e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe009.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe009_RMO_OPC/safe009.c b/regression/goto-instrument-wmm-core/x86_safe009_RMO_OPC/safe009.c new file mode 100644 index 00000000000..c3ecc77fdd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_RMO_OPC/safe009.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe009_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe009_RMO_OPC/test.desc new file mode 100644 index 00000000000..39da592b994 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe009.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe009_RMO_OPT/safe009.c b/regression/goto-instrument-wmm-core/x86_safe009_RMO_OPT/safe009.c new file mode 100644 index 00000000000..c3ecc77fdd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_RMO_OPT/safe009.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe009_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe009_RMO_OPT/test.desc new file mode 100644 index 00000000000..d00474e1f25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe009.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe009_SC_SAFE/safe009.c b/regression/goto-instrument-wmm-core/x86_safe009_SC_SAFE/safe009.c new file mode 100644 index 00000000000..c3ecc77fdd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_SC_SAFE/safe009.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe009_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe009_SC_SAFE/test.desc new file mode 100644 index 00000000000..5d2125a92ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe009.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe009_TSO_ALL/safe009.c b/regression/goto-instrument-wmm-core/x86_safe009_TSO_ALL/safe009.c new file mode 100644 index 00000000000..c3ecc77fdd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_TSO_ALL/safe009.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe009_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe009_TSO_ALL/test.desc new file mode 100644 index 00000000000..9e9f4538aac --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe009.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe009_TSO_OPC/safe009.c b/regression/goto-instrument-wmm-core/x86_safe009_TSO_OPC/safe009.c new file mode 100644 index 00000000000..c3ecc77fdd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_TSO_OPC/safe009.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe009_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe009_TSO_OPC/test.desc new file mode 100644 index 00000000000..259d8f88466 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe009.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe009_TSO_OPT/safe009.c b/regression/goto-instrument-wmm-core/x86_safe009_TSO_OPT/safe009.c new file mode 100644 index 00000000000..c3ecc77fdd3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_TSO_OPT/safe009.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe009_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe009_TSO_OPT/test.desc new file mode 100644 index 00000000000..20f4c2522fb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe009_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe009.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe010_CAV11_ERROR/safe010.c b/regression/goto-instrument-wmm-core/x86_safe010_CAV11_ERROR/safe010.c new file mode 100644 index 00000000000..695616c40e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_CAV11_ERROR/safe010.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe010_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe010_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..920a7e39735 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe010_POWER_ALL/safe010.c b/regression/goto-instrument-wmm-core/x86_safe010_POWER_ALL/safe010.c new file mode 100644 index 00000000000..695616c40e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_POWER_ALL/safe010.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe010_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe010_POWER_ALL/test.desc new file mode 100644 index 00000000000..14f97e6e0ac --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe010_POWER_OPC/safe010.c b/regression/goto-instrument-wmm-core/x86_safe010_POWER_OPC/safe010.c new file mode 100644 index 00000000000..695616c40e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_POWER_OPC/safe010.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe010_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe010_POWER_OPC/test.desc new file mode 100644 index 00000000000..5826a3b37be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe010_POWER_OPT/safe010.c b/regression/goto-instrument-wmm-core/x86_safe010_POWER_OPT/safe010.c new file mode 100644 index 00000000000..695616c40e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_POWER_OPT/safe010.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe010_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe010_POWER_OPT/test.desc new file mode 100644 index 00000000000..a4402a7603e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe010.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe010_PSO_ALL/safe010.c b/regression/goto-instrument-wmm-core/x86_safe010_PSO_ALL/safe010.c new file mode 100644 index 00000000000..695616c40e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_PSO_ALL/safe010.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe010_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe010_PSO_ALL/test.desc new file mode 100644 index 00000000000..d73a4f24409 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe010_PSO_OPC/safe010.c b/regression/goto-instrument-wmm-core/x86_safe010_PSO_OPC/safe010.c new file mode 100644 index 00000000000..695616c40e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_PSO_OPC/safe010.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe010_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe010_PSO_OPC/test.desc new file mode 100644 index 00000000000..8d2a3816324 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe010_PSO_OPT/safe010.c b/regression/goto-instrument-wmm-core/x86_safe010_PSO_OPT/safe010.c new file mode 100644 index 00000000000..695616c40e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_PSO_OPT/safe010.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe010_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe010_PSO_OPT/test.desc new file mode 100644 index 00000000000..e0b741369c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe010.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe010_RMO_ALL/safe010.c b/regression/goto-instrument-wmm-core/x86_safe010_RMO_ALL/safe010.c new file mode 100644 index 00000000000..695616c40e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_RMO_ALL/safe010.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe010_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe010_RMO_ALL/test.desc new file mode 100644 index 00000000000..58da3bc7b6b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe010_RMO_OPC/safe010.c b/regression/goto-instrument-wmm-core/x86_safe010_RMO_OPC/safe010.c new file mode 100644 index 00000000000..695616c40e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_RMO_OPC/safe010.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe010_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe010_RMO_OPC/test.desc new file mode 100644 index 00000000000..4e495fa7ffb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe010_RMO_OPT/safe010.c b/regression/goto-instrument-wmm-core/x86_safe010_RMO_OPT/safe010.c new file mode 100644 index 00000000000..695616c40e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_RMO_OPT/safe010.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe010_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe010_RMO_OPT/test.desc new file mode 100644 index 00000000000..eba29f20cd7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe010.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe010_SC_SAFE/safe010.c b/regression/goto-instrument-wmm-core/x86_safe010_SC_SAFE/safe010.c new file mode 100644 index 00000000000..695616c40e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_SC_SAFE/safe010.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe010_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe010_SC_SAFE/test.desc new file mode 100644 index 00000000000..f5f28cda90e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe010.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe010_TSO_ALL/safe010.c b/regression/goto-instrument-wmm-core/x86_safe010_TSO_ALL/safe010.c new file mode 100644 index 00000000000..695616c40e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_TSO_ALL/safe010.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe010_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe010_TSO_ALL/test.desc new file mode 100644 index 00000000000..2d5f759b0e8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe010.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe010_TSO_OPC/safe010.c b/regression/goto-instrument-wmm-core/x86_safe010_TSO_OPC/safe010.c new file mode 100644 index 00000000000..695616c40e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_TSO_OPC/safe010.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe010_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe010_TSO_OPC/test.desc new file mode 100644 index 00000000000..fcdfce46fbe --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe010.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe010_TSO_OPT/safe010.c b/regression/goto-instrument-wmm-core/x86_safe010_TSO_OPT/safe010.c new file mode 100644 index 00000000000..695616c40e4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_TSO_OPT/safe010.c @@ -0,0 +1,51 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe010_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe010_TSO_OPT/test.desc new file mode 100644 index 00000000000..e39de8246c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe010_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe010.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe011_CAV11_ERROR/safe011.c b/regression/goto-instrument-wmm-core/x86_safe011_CAV11_ERROR/safe011.c new file mode 100644 index 00000000000..7a26f84bed3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_CAV11_ERROR/safe011.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe011_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe011_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..a0c68cee927 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe011_POWER_ALL/safe011.c b/regression/goto-instrument-wmm-core/x86_safe011_POWER_ALL/safe011.c new file mode 100644 index 00000000000..7a26f84bed3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_POWER_ALL/safe011.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe011_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe011_POWER_ALL/test.desc new file mode 100644 index 00000000000..8bc5131d5df --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe011_POWER_OPC/safe011.c b/regression/goto-instrument-wmm-core/x86_safe011_POWER_OPC/safe011.c new file mode 100644 index 00000000000..7a26f84bed3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_POWER_OPC/safe011.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe011_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe011_POWER_OPC/test.desc new file mode 100644 index 00000000000..771004f92ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe011_POWER_OPT/safe011.c b/regression/goto-instrument-wmm-core/x86_safe011_POWER_OPT/safe011.c new file mode 100644 index 00000000000..7a26f84bed3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_POWER_OPT/safe011.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe011_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe011_POWER_OPT/test.desc new file mode 100644 index 00000000000..6a18b5c6686 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe011.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe011_PSO_ALL/safe011.c b/regression/goto-instrument-wmm-core/x86_safe011_PSO_ALL/safe011.c new file mode 100644 index 00000000000..7a26f84bed3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_PSO_ALL/safe011.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe011_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe011_PSO_ALL/test.desc new file mode 100644 index 00000000000..4c2e3fc953c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe011_PSO_OPC/safe011.c b/regression/goto-instrument-wmm-core/x86_safe011_PSO_OPC/safe011.c new file mode 100644 index 00000000000..7a26f84bed3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_PSO_OPC/safe011.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe011_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe011_PSO_OPC/test.desc new file mode 100644 index 00000000000..24db771a629 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe011_PSO_OPT/safe011.c b/regression/goto-instrument-wmm-core/x86_safe011_PSO_OPT/safe011.c new file mode 100644 index 00000000000..7a26f84bed3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_PSO_OPT/safe011.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe011_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe011_PSO_OPT/test.desc new file mode 100644 index 00000000000..68add6f97d3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe011.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe011_RMO_ALL/safe011.c b/regression/goto-instrument-wmm-core/x86_safe011_RMO_ALL/safe011.c new file mode 100644 index 00000000000..7a26f84bed3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_RMO_ALL/safe011.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe011_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe011_RMO_ALL/test.desc new file mode 100644 index 00000000000..ba1fb5dd16b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe011_RMO_OPC/safe011.c b/regression/goto-instrument-wmm-core/x86_safe011_RMO_OPC/safe011.c new file mode 100644 index 00000000000..7a26f84bed3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_RMO_OPC/safe011.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe011_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe011_RMO_OPC/test.desc new file mode 100644 index 00000000000..0adc6da165b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe011_RMO_OPT/safe011.c b/regression/goto-instrument-wmm-core/x86_safe011_RMO_OPT/safe011.c new file mode 100644 index 00000000000..7a26f84bed3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_RMO_OPT/safe011.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe011_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe011_RMO_OPT/test.desc new file mode 100644 index 00000000000..16d46c4f58c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe011.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe011_SC_SAFE/safe011.c b/regression/goto-instrument-wmm-core/x86_safe011_SC_SAFE/safe011.c new file mode 100644 index 00000000000..7a26f84bed3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_SC_SAFE/safe011.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe011_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe011_SC_SAFE/test.desc new file mode 100644 index 00000000000..b5dbee83ff0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe011.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe011_TSO_ALL/safe011.c b/regression/goto-instrument-wmm-core/x86_safe011_TSO_ALL/safe011.c new file mode 100644 index 00000000000..7a26f84bed3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_TSO_ALL/safe011.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe011_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe011_TSO_ALL/test.desc new file mode 100644 index 00000000000..327052719b7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe011.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe011_TSO_OPC/safe011.c b/regression/goto-instrument-wmm-core/x86_safe011_TSO_OPC/safe011.c new file mode 100644 index 00000000000..7a26f84bed3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_TSO_OPC/safe011.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe011_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe011_TSO_OPC/test.desc new file mode 100644 index 00000000000..cb986e9147e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe011.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe011_TSO_OPT/safe011.c b/regression/goto-instrument-wmm-core/x86_safe011_TSO_OPT/safe011.c new file mode 100644 index 00000000000..7a26f84bed3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_TSO_OPT/safe011.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && z == 2 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe011_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe011_TSO_OPT/test.desc new file mode 100644 index 00000000000..f97a17cdb1e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe011_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe011.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe012_CAV11_SAFE/safe012.c b/regression/goto-instrument-wmm-core/x86_safe012_CAV11_SAFE/safe012.c new file mode 100644 index 00000000000..19bfabddf4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_CAV11_SAFE/safe012.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe012_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe012_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..e98c71a67a4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe012.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe012_POWER_ALL/safe012.c b/regression/goto-instrument-wmm-core/x86_safe012_POWER_ALL/safe012.c new file mode 100644 index 00000000000..19bfabddf4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_POWER_ALL/safe012.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe012_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe012_POWER_ALL/test.desc new file mode 100644 index 00000000000..422b893ce7a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe012.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe012_POWER_OPC/safe012.c b/regression/goto-instrument-wmm-core/x86_safe012_POWER_OPC/safe012.c new file mode 100644 index 00000000000..19bfabddf4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_POWER_OPC/safe012.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe012_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe012_POWER_OPC/test.desc new file mode 100644 index 00000000000..774f514dd7c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe012.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe012_POWER_OPT/safe012.c b/regression/goto-instrument-wmm-core/x86_safe012_POWER_OPT/safe012.c new file mode 100644 index 00000000000..19bfabddf4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_POWER_OPT/safe012.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe012_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe012_POWER_OPT/test.desc new file mode 100644 index 00000000000..d84ccaadab2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe012.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe012_PSO_ALL/safe012.c b/regression/goto-instrument-wmm-core/x86_safe012_PSO_ALL/safe012.c new file mode 100644 index 00000000000..19bfabddf4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_PSO_ALL/safe012.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe012_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe012_PSO_ALL/test.desc new file mode 100644 index 00000000000..5220a98c925 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe012.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe012_PSO_OPC/safe012.c b/regression/goto-instrument-wmm-core/x86_safe012_PSO_OPC/safe012.c new file mode 100644 index 00000000000..19bfabddf4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_PSO_OPC/safe012.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe012_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe012_PSO_OPC/test.desc new file mode 100644 index 00000000000..c59a3e071ee --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe012.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe012_PSO_OPT/safe012.c b/regression/goto-instrument-wmm-core/x86_safe012_PSO_OPT/safe012.c new file mode 100644 index 00000000000..19bfabddf4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_PSO_OPT/safe012.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe012_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe012_PSO_OPT/test.desc new file mode 100644 index 00000000000..12d542ee093 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe012.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe012_RMO_ALL/safe012.c b/regression/goto-instrument-wmm-core/x86_safe012_RMO_ALL/safe012.c new file mode 100644 index 00000000000..19bfabddf4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_RMO_ALL/safe012.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe012_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe012_RMO_ALL/test.desc new file mode 100644 index 00000000000..a89404cdf5c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe012.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe012_RMO_OPC/safe012.c b/regression/goto-instrument-wmm-core/x86_safe012_RMO_OPC/safe012.c new file mode 100644 index 00000000000..19bfabddf4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_RMO_OPC/safe012.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe012_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe012_RMO_OPC/test.desc new file mode 100644 index 00000000000..494f253c361 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe012.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe012_RMO_OPT/safe012.c b/regression/goto-instrument-wmm-core/x86_safe012_RMO_OPT/safe012.c new file mode 100644 index 00000000000..19bfabddf4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_RMO_OPT/safe012.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe012_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe012_RMO_OPT/test.desc new file mode 100644 index 00000000000..3ab50f03204 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe012.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe012_SC_SAFE/safe012.c b/regression/goto-instrument-wmm-core/x86_safe012_SC_SAFE/safe012.c new file mode 100644 index 00000000000..19bfabddf4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_SC_SAFE/safe012.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe012_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe012_SC_SAFE/test.desc new file mode 100644 index 00000000000..556a4c9f032 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe012.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe012_TSO_ALL/safe012.c b/regression/goto-instrument-wmm-core/x86_safe012_TSO_ALL/safe012.c new file mode 100644 index 00000000000..19bfabddf4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_TSO_ALL/safe012.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe012_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe012_TSO_ALL/test.desc new file mode 100644 index 00000000000..e39d0976aa2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe012.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe012_TSO_OPC/safe012.c b/regression/goto-instrument-wmm-core/x86_safe012_TSO_OPC/safe012.c new file mode 100644 index 00000000000..19bfabddf4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_TSO_OPC/safe012.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe012_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe012_TSO_OPC/test.desc new file mode 100644 index 00000000000..66bd7fa923b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe012.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe012_TSO_OPT/safe012.c b/regression/goto-instrument-wmm-core/x86_safe012_TSO_OPT/safe012.c new file mode 100644 index 00000000000..19bfabddf4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_TSO_OPT/safe012.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe012_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe012_TSO_OPT/test.desc new file mode 100644 index 00000000000..ad85c5758f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe012_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe012.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe013_CAV11_ERROR/safe013.c b/regression/goto-instrument-wmm-core/x86_safe013_CAV11_ERROR/safe013.c new file mode 100644 index 00000000000..bbec4ff54e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_CAV11_ERROR/safe013.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe013_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe013_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..4c5ec3f33f2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe013.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe013_POWER_ALL/safe013.c b/regression/goto-instrument-wmm-core/x86_safe013_POWER_ALL/safe013.c new file mode 100644 index 00000000000..bbec4ff54e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_POWER_ALL/safe013.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe013_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe013_POWER_ALL/test.desc new file mode 100644 index 00000000000..ade8a85803d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe013.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe013_POWER_OPC/safe013.c b/regression/goto-instrument-wmm-core/x86_safe013_POWER_OPC/safe013.c new file mode 100644 index 00000000000..bbec4ff54e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_POWER_OPC/safe013.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe013_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe013_POWER_OPC/test.desc new file mode 100644 index 00000000000..7f9656439b6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe013.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe013_POWER_OPT/safe013.c b/regression/goto-instrument-wmm-core/x86_safe013_POWER_OPT/safe013.c new file mode 100644 index 00000000000..bbec4ff54e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_POWER_OPT/safe013.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe013_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe013_POWER_OPT/test.desc new file mode 100644 index 00000000000..9d25b23524d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe013.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe013_PSO_ALL/safe013.c b/regression/goto-instrument-wmm-core/x86_safe013_PSO_ALL/safe013.c new file mode 100644 index 00000000000..bbec4ff54e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_PSO_ALL/safe013.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe013_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe013_PSO_ALL/test.desc new file mode 100644 index 00000000000..ac2360cd006 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe013.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe013_PSO_OPC/safe013.c b/regression/goto-instrument-wmm-core/x86_safe013_PSO_OPC/safe013.c new file mode 100644 index 00000000000..bbec4ff54e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_PSO_OPC/safe013.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe013_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe013_PSO_OPC/test.desc new file mode 100644 index 00000000000..b8212cf73d9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe013.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe013_PSO_OPT/safe013.c b/regression/goto-instrument-wmm-core/x86_safe013_PSO_OPT/safe013.c new file mode 100644 index 00000000000..bbec4ff54e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_PSO_OPT/safe013.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe013_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe013_PSO_OPT/test.desc new file mode 100644 index 00000000000..e7677a004b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe013.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe013_RMO_ALL/safe013.c b/regression/goto-instrument-wmm-core/x86_safe013_RMO_ALL/safe013.c new file mode 100644 index 00000000000..bbec4ff54e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_RMO_ALL/safe013.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe013_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe013_RMO_ALL/test.desc new file mode 100644 index 00000000000..dd5ef691b4a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe013.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe013_RMO_OPC/safe013.c b/regression/goto-instrument-wmm-core/x86_safe013_RMO_OPC/safe013.c new file mode 100644 index 00000000000..bbec4ff54e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_RMO_OPC/safe013.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe013_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe013_RMO_OPC/test.desc new file mode 100644 index 00000000000..e3bfcf80a0d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe013.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe013_RMO_OPT/safe013.c b/regression/goto-instrument-wmm-core/x86_safe013_RMO_OPT/safe013.c new file mode 100644 index 00000000000..bbec4ff54e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_RMO_OPT/safe013.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe013_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe013_RMO_OPT/test.desc new file mode 100644 index 00000000000..0396b52bacd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe013.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe013_SC_SAFE/safe013.c b/regression/goto-instrument-wmm-core/x86_safe013_SC_SAFE/safe013.c new file mode 100644 index 00000000000..bbec4ff54e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_SC_SAFE/safe013.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe013_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe013_SC_SAFE/test.desc new file mode 100644 index 00000000000..0c9707fa628 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe013.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe013_TSO_ALL/safe013.c b/regression/goto-instrument-wmm-core/x86_safe013_TSO_ALL/safe013.c new file mode 100644 index 00000000000..bbec4ff54e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_TSO_ALL/safe013.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe013_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe013_TSO_ALL/test.desc new file mode 100644 index 00000000000..335ee6e841a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe013.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe013_TSO_OPC/safe013.c b/regression/goto-instrument-wmm-core/x86_safe013_TSO_OPC/safe013.c new file mode 100644 index 00000000000..bbec4ff54e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_TSO_OPC/safe013.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe013_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe013_TSO_OPC/test.desc new file mode 100644 index 00000000000..9faee213dec --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe013.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe013_TSO_OPT/safe013.c b/regression/goto-instrument-wmm-core/x86_safe013_TSO_OPT/safe013.c new file mode 100644 index 00000000000..bbec4ff54e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_TSO_OPT/safe013.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe013_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe013_TSO_OPT/test.desc new file mode 100644 index 00000000000..e056d35390d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe013_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe013.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe014_CAV11_ERROR/safe014.c b/regression/goto-instrument-wmm-core/x86_safe014_CAV11_ERROR/safe014.c new file mode 100644 index 00000000000..d489b9f0b1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_CAV11_ERROR/safe014.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe014_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe014_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..cc067d8d422 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe014_POWER_ALL/safe014.c b/regression/goto-instrument-wmm-core/x86_safe014_POWER_ALL/safe014.c new file mode 100644 index 00000000000..d489b9f0b1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_POWER_ALL/safe014.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe014_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe014_POWER_ALL/test.desc new file mode 100644 index 00000000000..fbed7cbd2ad --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe014_POWER_OPC/safe014.c b/regression/goto-instrument-wmm-core/x86_safe014_POWER_OPC/safe014.c new file mode 100644 index 00000000000..d489b9f0b1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_POWER_OPC/safe014.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe014_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe014_POWER_OPC/test.desc new file mode 100644 index 00000000000..9f53002dbcd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe014_POWER_OPT/safe014.c b/regression/goto-instrument-wmm-core/x86_safe014_POWER_OPT/safe014.c new file mode 100644 index 00000000000..d489b9f0b1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_POWER_OPT/safe014.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe014_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe014_POWER_OPT/test.desc new file mode 100644 index 00000000000..565aea7a8ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe014.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe014_PSO_ALL/safe014.c b/regression/goto-instrument-wmm-core/x86_safe014_PSO_ALL/safe014.c new file mode 100644 index 00000000000..d489b9f0b1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_PSO_ALL/safe014.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe014_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe014_PSO_ALL/test.desc new file mode 100644 index 00000000000..9f680c9e76d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe014_PSO_OPC/safe014.c b/regression/goto-instrument-wmm-core/x86_safe014_PSO_OPC/safe014.c new file mode 100644 index 00000000000..d489b9f0b1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_PSO_OPC/safe014.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe014_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe014_PSO_OPC/test.desc new file mode 100644 index 00000000000..be51f111783 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe014_PSO_OPT/safe014.c b/regression/goto-instrument-wmm-core/x86_safe014_PSO_OPT/safe014.c new file mode 100644 index 00000000000..d489b9f0b1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_PSO_OPT/safe014.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe014_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe014_PSO_OPT/test.desc new file mode 100644 index 00000000000..bef1655ad77 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe014.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe014_RMO_ALL/safe014.c b/regression/goto-instrument-wmm-core/x86_safe014_RMO_ALL/safe014.c new file mode 100644 index 00000000000..d489b9f0b1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_RMO_ALL/safe014.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe014_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe014_RMO_ALL/test.desc new file mode 100644 index 00000000000..4ef63a37b2f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe014_RMO_OPC/safe014.c b/regression/goto-instrument-wmm-core/x86_safe014_RMO_OPC/safe014.c new file mode 100644 index 00000000000..d489b9f0b1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_RMO_OPC/safe014.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe014_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe014_RMO_OPC/test.desc new file mode 100644 index 00000000000..6e07dfc0642 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe014_RMO_OPT/safe014.c b/regression/goto-instrument-wmm-core/x86_safe014_RMO_OPT/safe014.c new file mode 100644 index 00000000000..d489b9f0b1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_RMO_OPT/safe014.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe014_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe014_RMO_OPT/test.desc new file mode 100644 index 00000000000..e369bc42cc9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe014.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe014_SC_SAFE/safe014.c b/regression/goto-instrument-wmm-core/x86_safe014_SC_SAFE/safe014.c new file mode 100644 index 00000000000..d489b9f0b1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_SC_SAFE/safe014.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe014_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe014_SC_SAFE/test.desc new file mode 100644 index 00000000000..17bd1b3afce --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe014_TSO_ALL/safe014.c b/regression/goto-instrument-wmm-core/x86_safe014_TSO_ALL/safe014.c new file mode 100644 index 00000000000..d489b9f0b1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_TSO_ALL/safe014.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe014_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe014_TSO_ALL/test.desc new file mode 100644 index 00000000000..958d97d53d3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe014_TSO_OPC/safe014.c b/regression/goto-instrument-wmm-core/x86_safe014_TSO_OPC/safe014.c new file mode 100644 index 00000000000..d489b9f0b1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_TSO_OPC/safe014.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe014_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe014_TSO_OPC/test.desc new file mode 100644 index 00000000000..7dcdfa0d572 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe014.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe014_TSO_OPT/safe014.c b/regression/goto-instrument-wmm-core/x86_safe014_TSO_OPT/safe014.c new file mode 100644 index 00000000000..d489b9f0b1b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_TSO_OPT/safe014.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe014_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe014_TSO_OPT/test.desc new file mode 100644 index 00000000000..109d05ff8b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe014_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe014.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe015_CAV11_ERROR/safe015.c b/regression/goto-instrument-wmm-core/x86_safe015_CAV11_ERROR/safe015.c new file mode 100644 index 00000000000..e8f9d3434c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_CAV11_ERROR/safe015.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe015_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe015_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..33cfce731b5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe015_POWER_ALL/safe015.c b/regression/goto-instrument-wmm-core/x86_safe015_POWER_ALL/safe015.c new file mode 100644 index 00000000000..e8f9d3434c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_POWER_ALL/safe015.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe015_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe015_POWER_ALL/test.desc new file mode 100644 index 00000000000..fac2baf3e86 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe015_POWER_OPC/safe015.c b/regression/goto-instrument-wmm-core/x86_safe015_POWER_OPC/safe015.c new file mode 100644 index 00000000000..e8f9d3434c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_POWER_OPC/safe015.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe015_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe015_POWER_OPC/test.desc new file mode 100644 index 00000000000..6975f146e63 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe015_POWER_OPT/safe015.c b/regression/goto-instrument-wmm-core/x86_safe015_POWER_OPT/safe015.c new file mode 100644 index 00000000000..e8f9d3434c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_POWER_OPT/safe015.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe015_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe015_POWER_OPT/test.desc new file mode 100644 index 00000000000..0bba08b34e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe015.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe015_PSO_ALL/safe015.c b/regression/goto-instrument-wmm-core/x86_safe015_PSO_ALL/safe015.c new file mode 100644 index 00000000000..e8f9d3434c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_PSO_ALL/safe015.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe015_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe015_PSO_ALL/test.desc new file mode 100644 index 00000000000..fab66b04aca --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe015_PSO_OPC/safe015.c b/regression/goto-instrument-wmm-core/x86_safe015_PSO_OPC/safe015.c new file mode 100644 index 00000000000..e8f9d3434c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_PSO_OPC/safe015.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe015_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe015_PSO_OPC/test.desc new file mode 100644 index 00000000000..2fcc9a43c48 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe015_PSO_OPT/safe015.c b/regression/goto-instrument-wmm-core/x86_safe015_PSO_OPT/safe015.c new file mode 100644 index 00000000000..e8f9d3434c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_PSO_OPT/safe015.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe015_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe015_PSO_OPT/test.desc new file mode 100644 index 00000000000..ec87d279723 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe015.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe015_RMO_ALL/safe015.c b/regression/goto-instrument-wmm-core/x86_safe015_RMO_ALL/safe015.c new file mode 100644 index 00000000000..e8f9d3434c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_RMO_ALL/safe015.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe015_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe015_RMO_ALL/test.desc new file mode 100644 index 00000000000..21436b24a41 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe015_RMO_OPC/safe015.c b/regression/goto-instrument-wmm-core/x86_safe015_RMO_OPC/safe015.c new file mode 100644 index 00000000000..e8f9d3434c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_RMO_OPC/safe015.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe015_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe015_RMO_OPC/test.desc new file mode 100644 index 00000000000..6e0882b7324 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe015_RMO_OPT/safe015.c b/regression/goto-instrument-wmm-core/x86_safe015_RMO_OPT/safe015.c new file mode 100644 index 00000000000..e8f9d3434c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_RMO_OPT/safe015.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe015_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe015_RMO_OPT/test.desc new file mode 100644 index 00000000000..cef668540ed --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe015.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe015_SC_SAFE/safe015.c b/regression/goto-instrument-wmm-core/x86_safe015_SC_SAFE/safe015.c new file mode 100644 index 00000000000..e8f9d3434c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_SC_SAFE/safe015.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe015_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe015_SC_SAFE/test.desc new file mode 100644 index 00000000000..d5c556c62a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe015_TSO_ALL/safe015.c b/regression/goto-instrument-wmm-core/x86_safe015_TSO_ALL/safe015.c new file mode 100644 index 00000000000..e8f9d3434c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_TSO_ALL/safe015.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe015_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe015_TSO_ALL/test.desc new file mode 100644 index 00000000000..255453965be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe015_TSO_OPC/safe015.c b/regression/goto-instrument-wmm-core/x86_safe015_TSO_OPC/safe015.c new file mode 100644 index 00000000000..e8f9d3434c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_TSO_OPC/safe015.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe015_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe015_TSO_OPC/test.desc new file mode 100644 index 00000000000..ff0e75c9fee --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe015.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe015_TSO_OPT/safe015.c b/regression/goto-instrument-wmm-core/x86_safe015_TSO_OPT/safe015.c new file mode 100644 index 00000000000..e8f9d3434c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_TSO_OPT/safe015.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe015_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe015_TSO_OPT/test.desc new file mode 100644 index 00000000000..ed347c96452 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe015_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe015.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe016_CAV11_ERROR/safe016.c b/regression/goto-instrument-wmm-core/x86_safe016_CAV11_ERROR/safe016.c new file mode 100644 index 00000000000..6a22c9769e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_CAV11_ERROR/safe016.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe016_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe016_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..4ca369b3c36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe016_POWER_ALL/safe016.c b/regression/goto-instrument-wmm-core/x86_safe016_POWER_ALL/safe016.c new file mode 100644 index 00000000000..6a22c9769e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_POWER_ALL/safe016.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe016_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe016_POWER_ALL/test.desc new file mode 100644 index 00000000000..6c72fd7d0db --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe016_POWER_OPC/safe016.c b/regression/goto-instrument-wmm-core/x86_safe016_POWER_OPC/safe016.c new file mode 100644 index 00000000000..6a22c9769e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_POWER_OPC/safe016.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe016_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe016_POWER_OPC/test.desc new file mode 100644 index 00000000000..0daf23c012b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe016_POWER_OPT/safe016.c b/regression/goto-instrument-wmm-core/x86_safe016_POWER_OPT/safe016.c new file mode 100644 index 00000000000..6a22c9769e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_POWER_OPT/safe016.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe016_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe016_POWER_OPT/test.desc new file mode 100644 index 00000000000..4f271b30818 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe016.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe016_PSO_ALL/safe016.c b/regression/goto-instrument-wmm-core/x86_safe016_PSO_ALL/safe016.c new file mode 100644 index 00000000000..6a22c9769e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_PSO_ALL/safe016.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe016_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe016_PSO_ALL/test.desc new file mode 100644 index 00000000000..dd5ffaac848 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe016_PSO_OPC/safe016.c b/regression/goto-instrument-wmm-core/x86_safe016_PSO_OPC/safe016.c new file mode 100644 index 00000000000..6a22c9769e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_PSO_OPC/safe016.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe016_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe016_PSO_OPC/test.desc new file mode 100644 index 00000000000..7d271dac287 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe016_PSO_OPT/safe016.c b/regression/goto-instrument-wmm-core/x86_safe016_PSO_OPT/safe016.c new file mode 100644 index 00000000000..6a22c9769e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_PSO_OPT/safe016.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe016_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe016_PSO_OPT/test.desc new file mode 100644 index 00000000000..b872cd11f0e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe016.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe016_RMO_ALL/safe016.c b/regression/goto-instrument-wmm-core/x86_safe016_RMO_ALL/safe016.c new file mode 100644 index 00000000000..6a22c9769e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_RMO_ALL/safe016.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe016_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe016_RMO_ALL/test.desc new file mode 100644 index 00000000000..159d6d3e220 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe016_RMO_OPC/safe016.c b/regression/goto-instrument-wmm-core/x86_safe016_RMO_OPC/safe016.c new file mode 100644 index 00000000000..6a22c9769e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_RMO_OPC/safe016.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe016_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe016_RMO_OPC/test.desc new file mode 100644 index 00000000000..a1923c1e986 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe016_RMO_OPT/safe016.c b/regression/goto-instrument-wmm-core/x86_safe016_RMO_OPT/safe016.c new file mode 100644 index 00000000000..6a22c9769e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_RMO_OPT/safe016.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe016_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe016_RMO_OPT/test.desc new file mode 100644 index 00000000000..4bcd8cc83ad --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe016.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe016_SC_SAFE/safe016.c b/regression/goto-instrument-wmm-core/x86_safe016_SC_SAFE/safe016.c new file mode 100644 index 00000000000..6a22c9769e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_SC_SAFE/safe016.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe016_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe016_SC_SAFE/test.desc new file mode 100644 index 00000000000..1787de06c1f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe016_TSO_ALL/safe016.c b/regression/goto-instrument-wmm-core/x86_safe016_TSO_ALL/safe016.c new file mode 100644 index 00000000000..6a22c9769e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_TSO_ALL/safe016.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe016_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe016_TSO_ALL/test.desc new file mode 100644 index 00000000000..0eab719c206 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe016_TSO_OPC/safe016.c b/regression/goto-instrument-wmm-core/x86_safe016_TSO_OPC/safe016.c new file mode 100644 index 00000000000..6a22c9769e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_TSO_OPC/safe016.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe016_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe016_TSO_OPC/test.desc new file mode 100644 index 00000000000..6612b688803 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe016.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe016_TSO_OPT/safe016.c b/regression/goto-instrument-wmm-core/x86_safe016_TSO_OPT/safe016.c new file mode 100644 index 00000000000..6a22c9769e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_TSO_OPT/safe016.c @@ -0,0 +1,72 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe016_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe016_TSO_OPT/test.desc new file mode 100644 index 00000000000..9212712263d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe016_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe016.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe017_CAV11_ERROR/safe017.c b/regression/goto-instrument-wmm-core/x86_safe017_CAV11_ERROR/safe017.c new file mode 100644 index 00000000000..fa0e8c63457 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_CAV11_ERROR/safe017.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe017_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe017_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..32532e10a12 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe017_POWER_ALL/safe017.c b/regression/goto-instrument-wmm-core/x86_safe017_POWER_ALL/safe017.c new file mode 100644 index 00000000000..fa0e8c63457 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_POWER_ALL/safe017.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe017_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe017_POWER_ALL/test.desc new file mode 100644 index 00000000000..0799d6016ca --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe017_POWER_OPC/safe017.c b/regression/goto-instrument-wmm-core/x86_safe017_POWER_OPC/safe017.c new file mode 100644 index 00000000000..fa0e8c63457 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_POWER_OPC/safe017.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe017_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe017_POWER_OPC/test.desc new file mode 100644 index 00000000000..376c23923bf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe017_POWER_OPT/safe017.c b/regression/goto-instrument-wmm-core/x86_safe017_POWER_OPT/safe017.c new file mode 100644 index 00000000000..fa0e8c63457 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_POWER_OPT/safe017.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe017_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe017_POWER_OPT/test.desc new file mode 100644 index 00000000000..b2c5566a043 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe017.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe017_PSO_ALL/safe017.c b/regression/goto-instrument-wmm-core/x86_safe017_PSO_ALL/safe017.c new file mode 100644 index 00000000000..fa0e8c63457 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_PSO_ALL/safe017.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe017_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe017_PSO_ALL/test.desc new file mode 100644 index 00000000000..20070ccdeee --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe017_PSO_OPC/safe017.c b/regression/goto-instrument-wmm-core/x86_safe017_PSO_OPC/safe017.c new file mode 100644 index 00000000000..fa0e8c63457 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_PSO_OPC/safe017.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe017_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe017_PSO_OPC/test.desc new file mode 100644 index 00000000000..2dcc77a1064 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe017_PSO_OPT/safe017.c b/regression/goto-instrument-wmm-core/x86_safe017_PSO_OPT/safe017.c new file mode 100644 index 00000000000..fa0e8c63457 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_PSO_OPT/safe017.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe017_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe017_PSO_OPT/test.desc new file mode 100644 index 00000000000..d819c2f117b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe017.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe017_RMO_ALL/safe017.c b/regression/goto-instrument-wmm-core/x86_safe017_RMO_ALL/safe017.c new file mode 100644 index 00000000000..fa0e8c63457 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_RMO_ALL/safe017.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe017_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe017_RMO_ALL/test.desc new file mode 100644 index 00000000000..ca9cf31a834 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe017_RMO_OPC/safe017.c b/regression/goto-instrument-wmm-core/x86_safe017_RMO_OPC/safe017.c new file mode 100644 index 00000000000..fa0e8c63457 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_RMO_OPC/safe017.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe017_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe017_RMO_OPC/test.desc new file mode 100644 index 00000000000..71e2dafbfb7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe017_RMO_OPT/safe017.c b/regression/goto-instrument-wmm-core/x86_safe017_RMO_OPT/safe017.c new file mode 100644 index 00000000000..fa0e8c63457 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_RMO_OPT/safe017.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe017_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe017_RMO_OPT/test.desc new file mode 100644 index 00000000000..2e8802977b9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe017.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe017_SC_SAFE/safe017.c b/regression/goto-instrument-wmm-core/x86_safe017_SC_SAFE/safe017.c new file mode 100644 index 00000000000..fa0e8c63457 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_SC_SAFE/safe017.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe017_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe017_SC_SAFE/test.desc new file mode 100644 index 00000000000..2f56581ab58 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe017.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe017_TSO_ALL/safe017.c b/regression/goto-instrument-wmm-core/x86_safe017_TSO_ALL/safe017.c new file mode 100644 index 00000000000..fa0e8c63457 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_TSO_ALL/safe017.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe017_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe017_TSO_ALL/test.desc new file mode 100644 index 00000000000..7ffcf518188 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe017.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe017_TSO_OPC/safe017.c b/regression/goto-instrument-wmm-core/x86_safe017_TSO_OPC/safe017.c new file mode 100644 index 00000000000..fa0e8c63457 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_TSO_OPC/safe017.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe017_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe017_TSO_OPC/test.desc new file mode 100644 index 00000000000..3ad964687a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe017.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe017_TSO_OPT/safe017.c b/regression/goto-instrument-wmm-core/x86_safe017_TSO_OPT/safe017.c new file mode 100644 index 00000000000..fa0e8c63457 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_TSO_OPT/safe017.c @@ -0,0 +1,61 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p2_EAX == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe017_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe017_TSO_OPT/test.desc new file mode 100644 index 00000000000..a799b931706 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe017_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe017.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe018_CAV11_SAFE/safe018.c b/regression/goto-instrument-wmm-core/x86_safe018_CAV11_SAFE/safe018.c new file mode 100644 index 00000000000..8e96f51c940 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_CAV11_SAFE/safe018.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe018_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe018_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..d8e8851910f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe018_POWER_ALL/safe018.c b/regression/goto-instrument-wmm-core/x86_safe018_POWER_ALL/safe018.c new file mode 100644 index 00000000000..8e96f51c940 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_POWER_ALL/safe018.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe018_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe018_POWER_ALL/test.desc new file mode 100644 index 00000000000..556bc7a86cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe018_POWER_OPC/safe018.c b/regression/goto-instrument-wmm-core/x86_safe018_POWER_OPC/safe018.c new file mode 100644 index 00000000000..8e96f51c940 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_POWER_OPC/safe018.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe018_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe018_POWER_OPC/test.desc new file mode 100644 index 00000000000..91ccfcad734 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe018_POWER_OPT/safe018.c b/regression/goto-instrument-wmm-core/x86_safe018_POWER_OPT/safe018.c new file mode 100644 index 00000000000..8e96f51c940 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_POWER_OPT/safe018.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe018_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe018_POWER_OPT/test.desc new file mode 100644 index 00000000000..e10f750517d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe018.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe018_PSO_ALL/safe018.c b/regression/goto-instrument-wmm-core/x86_safe018_PSO_ALL/safe018.c new file mode 100644 index 00000000000..8e96f51c940 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_PSO_ALL/safe018.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe018_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe018_PSO_ALL/test.desc new file mode 100644 index 00000000000..e4b883d28e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe018_PSO_OPC/safe018.c b/regression/goto-instrument-wmm-core/x86_safe018_PSO_OPC/safe018.c new file mode 100644 index 00000000000..8e96f51c940 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_PSO_OPC/safe018.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe018_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe018_PSO_OPC/test.desc new file mode 100644 index 00000000000..3dc627399b6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe018_PSO_OPT/safe018.c b/regression/goto-instrument-wmm-core/x86_safe018_PSO_OPT/safe018.c new file mode 100644 index 00000000000..8e96f51c940 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_PSO_OPT/safe018.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe018_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe018_PSO_OPT/test.desc new file mode 100644 index 00000000000..4018506f6c5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe018.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe018_RMO_ALL/safe018.c b/regression/goto-instrument-wmm-core/x86_safe018_RMO_ALL/safe018.c new file mode 100644 index 00000000000..8e96f51c940 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_RMO_ALL/safe018.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe018_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe018_RMO_ALL/test.desc new file mode 100644 index 00000000000..89afabc61ae --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe018_RMO_OPC/safe018.c b/regression/goto-instrument-wmm-core/x86_safe018_RMO_OPC/safe018.c new file mode 100644 index 00000000000..8e96f51c940 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_RMO_OPC/safe018.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe018_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe018_RMO_OPC/test.desc new file mode 100644 index 00000000000..b7872c827ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe018_RMO_OPT/safe018.c b/regression/goto-instrument-wmm-core/x86_safe018_RMO_OPT/safe018.c new file mode 100644 index 00000000000..8e96f51c940 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_RMO_OPT/safe018.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe018_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe018_RMO_OPT/test.desc new file mode 100644 index 00000000000..fe35e18cdf7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe018.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe018_SC_SAFE/safe018.c b/regression/goto-instrument-wmm-core/x86_safe018_SC_SAFE/safe018.c new file mode 100644 index 00000000000..8e96f51c940 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_SC_SAFE/safe018.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe018_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe018_SC_SAFE/test.desc new file mode 100644 index 00000000000..ce6c73fac65 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe018_TSO_ALL/safe018.c b/regression/goto-instrument-wmm-core/x86_safe018_TSO_ALL/safe018.c new file mode 100644 index 00000000000..8e96f51c940 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_TSO_ALL/safe018.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe018_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe018_TSO_ALL/test.desc new file mode 100644 index 00000000000..cc8bcadd160 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe018_TSO_OPC/safe018.c b/regression/goto-instrument-wmm-core/x86_safe018_TSO_OPC/safe018.c new file mode 100644 index 00000000000..8e96f51c940 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_TSO_OPC/safe018.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe018_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe018_TSO_OPC/test.desc new file mode 100644 index 00000000000..180da74c8f0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe018.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe018_TSO_OPT/safe018.c b/regression/goto-instrument-wmm-core/x86_safe018_TSO_OPT/safe018.c new file mode 100644 index 00000000000..8e96f51c940 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_TSO_OPT/safe018.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe018_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe018_TSO_OPT/test.desc new file mode 100644 index 00000000000..ddb7a07a111 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe018_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe018.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe019_CAV11_ERROR/safe019.c b/regression/goto-instrument-wmm-core/x86_safe019_CAV11_ERROR/safe019.c new file mode 100644 index 00000000000..06542efdb7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_CAV11_ERROR/safe019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe019_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe019_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..d8213751097 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe019.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe019_POWER_ALL/safe019.c b/regression/goto-instrument-wmm-core/x86_safe019_POWER_ALL/safe019.c new file mode 100644 index 00000000000..06542efdb7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_POWER_ALL/safe019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe019_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe019_POWER_ALL/test.desc new file mode 100644 index 00000000000..9be71ef9171 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe019.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe019_POWER_OPC/safe019.c b/regression/goto-instrument-wmm-core/x86_safe019_POWER_OPC/safe019.c new file mode 100644 index 00000000000..06542efdb7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_POWER_OPC/safe019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe019_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe019_POWER_OPC/test.desc new file mode 100644 index 00000000000..65e3b4780f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe019.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe019_POWER_OPT/safe019.c b/regression/goto-instrument-wmm-core/x86_safe019_POWER_OPT/safe019.c new file mode 100644 index 00000000000..06542efdb7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_POWER_OPT/safe019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe019_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe019_POWER_OPT/test.desc new file mode 100644 index 00000000000..97348792215 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe019.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe019_PSO_ALL/safe019.c b/regression/goto-instrument-wmm-core/x86_safe019_PSO_ALL/safe019.c new file mode 100644 index 00000000000..06542efdb7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_PSO_ALL/safe019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe019_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe019_PSO_ALL/test.desc new file mode 100644 index 00000000000..1749c3fef07 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe019.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe019_PSO_OPC/safe019.c b/regression/goto-instrument-wmm-core/x86_safe019_PSO_OPC/safe019.c new file mode 100644 index 00000000000..06542efdb7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_PSO_OPC/safe019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe019_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe019_PSO_OPC/test.desc new file mode 100644 index 00000000000..b479af95f22 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe019.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe019_PSO_OPT/safe019.c b/regression/goto-instrument-wmm-core/x86_safe019_PSO_OPT/safe019.c new file mode 100644 index 00000000000..06542efdb7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_PSO_OPT/safe019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe019_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe019_PSO_OPT/test.desc new file mode 100644 index 00000000000..368a9055463 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe019.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe019_RMO_ALL/safe019.c b/regression/goto-instrument-wmm-core/x86_safe019_RMO_ALL/safe019.c new file mode 100644 index 00000000000..06542efdb7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_RMO_ALL/safe019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe019_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe019_RMO_ALL/test.desc new file mode 100644 index 00000000000..8b137ae6955 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe019.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe019_RMO_OPC/safe019.c b/regression/goto-instrument-wmm-core/x86_safe019_RMO_OPC/safe019.c new file mode 100644 index 00000000000..06542efdb7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_RMO_OPC/safe019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe019_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe019_RMO_OPC/test.desc new file mode 100644 index 00000000000..8e38f7ef9da --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe019.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe019_RMO_OPT/safe019.c b/regression/goto-instrument-wmm-core/x86_safe019_RMO_OPT/safe019.c new file mode 100644 index 00000000000..06542efdb7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_RMO_OPT/safe019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe019_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe019_RMO_OPT/test.desc new file mode 100644 index 00000000000..f232fcbe935 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe019.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe019_SC_SAFE/safe019.c b/regression/goto-instrument-wmm-core/x86_safe019_SC_SAFE/safe019.c new file mode 100644 index 00000000000..06542efdb7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_SC_SAFE/safe019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe019_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe019_SC_SAFE/test.desc new file mode 100644 index 00000000000..ff91e848e36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe019.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe019_TSO_ALL/safe019.c b/regression/goto-instrument-wmm-core/x86_safe019_TSO_ALL/safe019.c new file mode 100644 index 00000000000..06542efdb7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_TSO_ALL/safe019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe019_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe019_TSO_ALL/test.desc new file mode 100644 index 00000000000..71766201bbf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe019.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe019_TSO_OPC/safe019.c b/regression/goto-instrument-wmm-core/x86_safe019_TSO_OPC/safe019.c new file mode 100644 index 00000000000..06542efdb7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_TSO_OPC/safe019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe019_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe019_TSO_OPC/test.desc new file mode 100644 index 00000000000..43f628b95fb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe019.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe019_TSO_OPT/safe019.c b/regression/goto-instrument-wmm-core/x86_safe019_TSO_OPT/safe019.c new file mode 100644 index 00000000000..06542efdb7f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_TSO_OPT/safe019.c @@ -0,0 +1,74 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 2 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe019_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe019_TSO_OPT/test.desc new file mode 100644 index 00000000000..7e1629b7555 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe019_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe019.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe020_CAV11_ERROR/safe020.c b/regression/goto-instrument-wmm-core/x86_safe020_CAV11_ERROR/safe020.c new file mode 100644 index 00000000000..bbed0de82cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_CAV11_ERROR/safe020.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe020_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe020_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..b91229638a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe020.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe020_POWER_ALL/safe020.c b/regression/goto-instrument-wmm-core/x86_safe020_POWER_ALL/safe020.c new file mode 100644 index 00000000000..bbed0de82cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_POWER_ALL/safe020.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe020_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe020_POWER_ALL/test.desc new file mode 100644 index 00000000000..5ea6dd0bb44 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe020.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe020_POWER_OPC/safe020.c b/regression/goto-instrument-wmm-core/x86_safe020_POWER_OPC/safe020.c new file mode 100644 index 00000000000..bbed0de82cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_POWER_OPC/safe020.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe020_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe020_POWER_OPC/test.desc new file mode 100644 index 00000000000..ceeb2f6d7e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe020.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe020_POWER_OPT/safe020.c b/regression/goto-instrument-wmm-core/x86_safe020_POWER_OPT/safe020.c new file mode 100644 index 00000000000..bbed0de82cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_POWER_OPT/safe020.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe020_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe020_POWER_OPT/test.desc new file mode 100644 index 00000000000..517acdc8fcc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe020.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe020_PSO_ALL/safe020.c b/regression/goto-instrument-wmm-core/x86_safe020_PSO_ALL/safe020.c new file mode 100644 index 00000000000..bbed0de82cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_PSO_ALL/safe020.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe020_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe020_PSO_ALL/test.desc new file mode 100644 index 00000000000..ee530461f56 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe020.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe020_PSO_OPC/safe020.c b/regression/goto-instrument-wmm-core/x86_safe020_PSO_OPC/safe020.c new file mode 100644 index 00000000000..bbed0de82cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_PSO_OPC/safe020.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe020_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe020_PSO_OPC/test.desc new file mode 100644 index 00000000000..6b747a3cabd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe020.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe020_PSO_OPT/safe020.c b/regression/goto-instrument-wmm-core/x86_safe020_PSO_OPT/safe020.c new file mode 100644 index 00000000000..bbed0de82cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_PSO_OPT/safe020.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe020_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe020_PSO_OPT/test.desc new file mode 100644 index 00000000000..49ac620403a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe020.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe020_RMO_ALL/safe020.c b/regression/goto-instrument-wmm-core/x86_safe020_RMO_ALL/safe020.c new file mode 100644 index 00000000000..bbed0de82cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_RMO_ALL/safe020.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe020_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe020_RMO_ALL/test.desc new file mode 100644 index 00000000000..f83a270a1a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe020.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe020_RMO_OPC/safe020.c b/regression/goto-instrument-wmm-core/x86_safe020_RMO_OPC/safe020.c new file mode 100644 index 00000000000..bbed0de82cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_RMO_OPC/safe020.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe020_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe020_RMO_OPC/test.desc new file mode 100644 index 00000000000..ae93a31b2c3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe020.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe020_RMO_OPT/safe020.c b/regression/goto-instrument-wmm-core/x86_safe020_RMO_OPT/safe020.c new file mode 100644 index 00000000000..bbed0de82cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_RMO_OPT/safe020.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe020_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe020_RMO_OPT/test.desc new file mode 100644 index 00000000000..16ce6fa70b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe020.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe020_SC_SAFE/safe020.c b/regression/goto-instrument-wmm-core/x86_safe020_SC_SAFE/safe020.c new file mode 100644 index 00000000000..bbed0de82cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_SC_SAFE/safe020.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe020_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe020_SC_SAFE/test.desc new file mode 100644 index 00000000000..1ba35fddb27 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe020.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe020_TSO_ALL/safe020.c b/regression/goto-instrument-wmm-core/x86_safe020_TSO_ALL/safe020.c new file mode 100644 index 00000000000..bbed0de82cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_TSO_ALL/safe020.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe020_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe020_TSO_ALL/test.desc new file mode 100644 index 00000000000..6a2c65ec248 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe020.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe020_TSO_OPC/safe020.c b/regression/goto-instrument-wmm-core/x86_safe020_TSO_OPC/safe020.c new file mode 100644 index 00000000000..bbed0de82cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_TSO_OPC/safe020.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe020_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe020_TSO_OPC/test.desc new file mode 100644 index 00000000000..1f871736e97 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe020.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe020_TSO_OPT/safe020.c b/regression/goto-instrument-wmm-core/x86_safe020_TSO_OPT/safe020.c new file mode 100644 index 00000000000..bbed0de82cd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_TSO_OPT/safe020.c @@ -0,0 +1,63 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe020_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe020_TSO_OPT/test.desc new file mode 100644 index 00000000000..ea924cb2e6f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe020_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe020.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe021_CAV11_ERROR/safe021.c b/regression/goto-instrument-wmm-core/x86_safe021_CAV11_ERROR/safe021.c new file mode 100644 index 00000000000..fbfaa7b6005 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_CAV11_ERROR/safe021.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe021_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe021_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..8d82df32225 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe021.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe021_POWER_ALL/safe021.c b/regression/goto-instrument-wmm-core/x86_safe021_POWER_ALL/safe021.c new file mode 100644 index 00000000000..fbfaa7b6005 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_POWER_ALL/safe021.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe021_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe021_POWER_ALL/test.desc new file mode 100644 index 00000000000..d0e23c0908b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe021.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe021_POWER_OPC/safe021.c b/regression/goto-instrument-wmm-core/x86_safe021_POWER_OPC/safe021.c new file mode 100644 index 00000000000..fbfaa7b6005 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_POWER_OPC/safe021.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe021_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe021_POWER_OPC/test.desc new file mode 100644 index 00000000000..a27194b3999 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe021.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe021_POWER_OPT/safe021.c b/regression/goto-instrument-wmm-core/x86_safe021_POWER_OPT/safe021.c new file mode 100644 index 00000000000..fbfaa7b6005 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_POWER_OPT/safe021.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe021_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe021_POWER_OPT/test.desc new file mode 100644 index 00000000000..7f5ffe3ca9b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe021.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe021_PSO_ALL/safe021.c b/regression/goto-instrument-wmm-core/x86_safe021_PSO_ALL/safe021.c new file mode 100644 index 00000000000..fbfaa7b6005 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_PSO_ALL/safe021.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe021_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe021_PSO_ALL/test.desc new file mode 100644 index 00000000000..093cae34237 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe021.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe021_PSO_OPC/safe021.c b/regression/goto-instrument-wmm-core/x86_safe021_PSO_OPC/safe021.c new file mode 100644 index 00000000000..fbfaa7b6005 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_PSO_OPC/safe021.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe021_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe021_PSO_OPC/test.desc new file mode 100644 index 00000000000..c6f0434969f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe021.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe021_PSO_OPT/safe021.c b/regression/goto-instrument-wmm-core/x86_safe021_PSO_OPT/safe021.c new file mode 100644 index 00000000000..fbfaa7b6005 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_PSO_OPT/safe021.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe021_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe021_PSO_OPT/test.desc new file mode 100644 index 00000000000..529dc35866a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe021.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe021_RMO_ALL/safe021.c b/regression/goto-instrument-wmm-core/x86_safe021_RMO_ALL/safe021.c new file mode 100644 index 00000000000..fbfaa7b6005 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_RMO_ALL/safe021.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe021_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe021_RMO_ALL/test.desc new file mode 100644 index 00000000000..43a0a33cc32 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe021.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe021_RMO_OPC/safe021.c b/regression/goto-instrument-wmm-core/x86_safe021_RMO_OPC/safe021.c new file mode 100644 index 00000000000..fbfaa7b6005 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_RMO_OPC/safe021.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe021_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe021_RMO_OPC/test.desc new file mode 100644 index 00000000000..bc3e1b3b48e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe021.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe021_RMO_OPT/safe021.c b/regression/goto-instrument-wmm-core/x86_safe021_RMO_OPT/safe021.c new file mode 100644 index 00000000000..fbfaa7b6005 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_RMO_OPT/safe021.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe021_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe021_RMO_OPT/test.desc new file mode 100644 index 00000000000..ccfa9d2b8e0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe021.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe021_SC_SAFE/safe021.c b/regression/goto-instrument-wmm-core/x86_safe021_SC_SAFE/safe021.c new file mode 100644 index 00000000000..fbfaa7b6005 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_SC_SAFE/safe021.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe021_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe021_SC_SAFE/test.desc new file mode 100644 index 00000000000..622c5b53182 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe021.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe021_TSO_ALL/safe021.c b/regression/goto-instrument-wmm-core/x86_safe021_TSO_ALL/safe021.c new file mode 100644 index 00000000000..fbfaa7b6005 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_TSO_ALL/safe021.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe021_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe021_TSO_ALL/test.desc new file mode 100644 index 00000000000..893b31c148d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe021.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe021_TSO_OPC/safe021.c b/regression/goto-instrument-wmm-core/x86_safe021_TSO_OPC/safe021.c new file mode 100644 index 00000000000..fbfaa7b6005 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_TSO_OPC/safe021.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe021_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe021_TSO_OPC/test.desc new file mode 100644 index 00000000000..8f5c7084236 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe021.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe021_TSO_OPT/safe021.c b/regression/goto-instrument-wmm-core/x86_safe021_TSO_OPT/safe021.c new file mode 100644 index 00000000000..fbfaa7b6005 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_TSO_OPT/safe021.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe021_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe021_TSO_OPT/test.desc new file mode 100644 index 00000000000..56cc9d26a9d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe021_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe021.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe022_CAV11_SAFE/safe022.c b/regression/goto-instrument-wmm-core/x86_safe022_CAV11_SAFE/safe022.c new file mode 100644 index 00000000000..5bb7450ad98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_CAV11_SAFE/safe022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe022_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe022_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..3b4c368e942 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe022_POWER_ALL/safe022.c b/regression/goto-instrument-wmm-core/x86_safe022_POWER_ALL/safe022.c new file mode 100644 index 00000000000..5bb7450ad98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_POWER_ALL/safe022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe022_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe022_POWER_ALL/test.desc new file mode 100644 index 00000000000..4c612594cd2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe022_POWER_OPC/safe022.c b/regression/goto-instrument-wmm-core/x86_safe022_POWER_OPC/safe022.c new file mode 100644 index 00000000000..5bb7450ad98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_POWER_OPC/safe022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe022_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe022_POWER_OPC/test.desc new file mode 100644 index 00000000000..f29b77aa6be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe022_POWER_OPT/safe022.c b/regression/goto-instrument-wmm-core/x86_safe022_POWER_OPT/safe022.c new file mode 100644 index 00000000000..5bb7450ad98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_POWER_OPT/safe022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe022_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe022_POWER_OPT/test.desc new file mode 100644 index 00000000000..e07daa95387 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe022.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe022_PSO_ALL/safe022.c b/regression/goto-instrument-wmm-core/x86_safe022_PSO_ALL/safe022.c new file mode 100644 index 00000000000..5bb7450ad98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_PSO_ALL/safe022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe022_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe022_PSO_ALL/test.desc new file mode 100644 index 00000000000..f07359fb6dd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe022_PSO_OPC/safe022.c b/regression/goto-instrument-wmm-core/x86_safe022_PSO_OPC/safe022.c new file mode 100644 index 00000000000..5bb7450ad98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_PSO_OPC/safe022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe022_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe022_PSO_OPC/test.desc new file mode 100644 index 00000000000..c947253f5d2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe022_PSO_OPT/safe022.c b/regression/goto-instrument-wmm-core/x86_safe022_PSO_OPT/safe022.c new file mode 100644 index 00000000000..5bb7450ad98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_PSO_OPT/safe022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe022_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe022_PSO_OPT/test.desc new file mode 100644 index 00000000000..91ed2c6c1cb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe022.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe022_RMO_ALL/safe022.c b/regression/goto-instrument-wmm-core/x86_safe022_RMO_ALL/safe022.c new file mode 100644 index 00000000000..5bb7450ad98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_RMO_ALL/safe022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe022_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe022_RMO_ALL/test.desc new file mode 100644 index 00000000000..2144b5069c1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe022_RMO_OPC/safe022.c b/regression/goto-instrument-wmm-core/x86_safe022_RMO_OPC/safe022.c new file mode 100644 index 00000000000..5bb7450ad98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_RMO_OPC/safe022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe022_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe022_RMO_OPC/test.desc new file mode 100644 index 00000000000..a4c35c1d538 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe022_RMO_OPT/safe022.c b/regression/goto-instrument-wmm-core/x86_safe022_RMO_OPT/safe022.c new file mode 100644 index 00000000000..5bb7450ad98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_RMO_OPT/safe022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe022_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe022_RMO_OPT/test.desc new file mode 100644 index 00000000000..69911294933 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe022.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe022_SC_SAFE/safe022.c b/regression/goto-instrument-wmm-core/x86_safe022_SC_SAFE/safe022.c new file mode 100644 index 00000000000..5bb7450ad98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_SC_SAFE/safe022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe022_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe022_SC_SAFE/test.desc new file mode 100644 index 00000000000..23779e73c13 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe022_TSO_ALL/safe022.c b/regression/goto-instrument-wmm-core/x86_safe022_TSO_ALL/safe022.c new file mode 100644 index 00000000000..5bb7450ad98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_TSO_ALL/safe022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe022_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe022_TSO_ALL/test.desc new file mode 100644 index 00000000000..5cb4e45cc1f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe022_TSO_OPC/safe022.c b/regression/goto-instrument-wmm-core/x86_safe022_TSO_OPC/safe022.c new file mode 100644 index 00000000000..5bb7450ad98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_TSO_OPC/safe022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe022_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe022_TSO_OPC/test.desc new file mode 100644 index 00000000000..d09fc3644b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe022.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe022_TSO_OPT/safe022.c b/regression/goto-instrument-wmm-core/x86_safe022_TSO_OPT/safe022.c new file mode 100644 index 00000000000..5bb7450ad98 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_TSO_OPT/safe022.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p1_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + __unbuffered_p1_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p1_EAX == 1 && __unbuffered_p1_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe022_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe022_TSO_OPT/test.desc new file mode 100644 index 00000000000..0d657dae25f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe022_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe022.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe023_CAV11_ERROR/safe023.c b/regression/goto-instrument-wmm-core/x86_safe023_CAV11_ERROR/safe023.c new file mode 100644 index 00000000000..d7b370b49ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_CAV11_ERROR/safe023.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe023_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe023_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..754e2d901ef --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe023.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe023_POWER_ALL/safe023.c b/regression/goto-instrument-wmm-core/x86_safe023_POWER_ALL/safe023.c new file mode 100644 index 00000000000..d7b370b49ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_POWER_ALL/safe023.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe023_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe023_POWER_ALL/test.desc new file mode 100644 index 00000000000..1aac4f443a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe023.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe023_POWER_OPC/safe023.c b/regression/goto-instrument-wmm-core/x86_safe023_POWER_OPC/safe023.c new file mode 100644 index 00000000000..d7b370b49ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_POWER_OPC/safe023.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe023_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe023_POWER_OPC/test.desc new file mode 100644 index 00000000000..21f96ceb35c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe023.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe023_POWER_OPT/safe023.c b/regression/goto-instrument-wmm-core/x86_safe023_POWER_OPT/safe023.c new file mode 100644 index 00000000000..d7b370b49ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_POWER_OPT/safe023.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe023_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe023_POWER_OPT/test.desc new file mode 100644 index 00000000000..5a75cb29f91 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe023.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe023_PSO_ALL/safe023.c b/regression/goto-instrument-wmm-core/x86_safe023_PSO_ALL/safe023.c new file mode 100644 index 00000000000..d7b370b49ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_PSO_ALL/safe023.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe023_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe023_PSO_ALL/test.desc new file mode 100644 index 00000000000..f6d3bf20213 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe023.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe023_PSO_OPC/safe023.c b/regression/goto-instrument-wmm-core/x86_safe023_PSO_OPC/safe023.c new file mode 100644 index 00000000000..d7b370b49ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_PSO_OPC/safe023.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe023_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe023_PSO_OPC/test.desc new file mode 100644 index 00000000000..c203865db2b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe023.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe023_PSO_OPT/safe023.c b/regression/goto-instrument-wmm-core/x86_safe023_PSO_OPT/safe023.c new file mode 100644 index 00000000000..d7b370b49ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_PSO_OPT/safe023.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe023_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe023_PSO_OPT/test.desc new file mode 100644 index 00000000000..0e8fee6219e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe023.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe023_RMO_ALL/safe023.c b/regression/goto-instrument-wmm-core/x86_safe023_RMO_ALL/safe023.c new file mode 100644 index 00000000000..d7b370b49ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_RMO_ALL/safe023.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe023_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe023_RMO_ALL/test.desc new file mode 100644 index 00000000000..2147357781a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe023.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe023_RMO_OPC/safe023.c b/regression/goto-instrument-wmm-core/x86_safe023_RMO_OPC/safe023.c new file mode 100644 index 00000000000..d7b370b49ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_RMO_OPC/safe023.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe023_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe023_RMO_OPC/test.desc new file mode 100644 index 00000000000..b4b2045e73f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe023.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe023_RMO_OPT/safe023.c b/regression/goto-instrument-wmm-core/x86_safe023_RMO_OPT/safe023.c new file mode 100644 index 00000000000..d7b370b49ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_RMO_OPT/safe023.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe023_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe023_RMO_OPT/test.desc new file mode 100644 index 00000000000..0953cdd63af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe023.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe023_SC_SAFE/safe023.c b/regression/goto-instrument-wmm-core/x86_safe023_SC_SAFE/safe023.c new file mode 100644 index 00000000000..d7b370b49ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_SC_SAFE/safe023.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe023_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe023_SC_SAFE/test.desc new file mode 100644 index 00000000000..34d37a6a07d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe023.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe023_TSO_ALL/safe023.c b/regression/goto-instrument-wmm-core/x86_safe023_TSO_ALL/safe023.c new file mode 100644 index 00000000000..d7b370b49ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_TSO_ALL/safe023.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe023_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe023_TSO_ALL/test.desc new file mode 100644 index 00000000000..9b23a1cdd56 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe023.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe023_TSO_OPC/safe023.c b/regression/goto-instrument-wmm-core/x86_safe023_TSO_OPC/safe023.c new file mode 100644 index 00000000000..d7b370b49ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_TSO_OPC/safe023.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe023_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe023_TSO_OPC/test.desc new file mode 100644 index 00000000000..b41ee2b3f39 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe023.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe023_TSO_OPT/safe023.c b/regression/goto-instrument-wmm-core/x86_safe023_TSO_OPT/safe023.c new file mode 100644 index 00000000000..d7b370b49ea --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_TSO_OPT/safe023.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 1 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe023_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe023_TSO_OPT/test.desc new file mode 100644 index 00000000000..124f24585ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe023_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe023.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe024_CAV11_SAFE/safe024.c b/regression/goto-instrument-wmm-core/x86_safe024_CAV11_SAFE/safe024.c new file mode 100644 index 00000000000..3284f995c94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_CAV11_SAFE/safe024.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe024_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe024_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..e4ac3c7a884 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe024_POWER_ALL/safe024.c b/regression/goto-instrument-wmm-core/x86_safe024_POWER_ALL/safe024.c new file mode 100644 index 00000000000..3284f995c94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_POWER_ALL/safe024.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe024_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe024_POWER_ALL/test.desc new file mode 100644 index 00000000000..4327209b7f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe024_POWER_OPC/safe024.c b/regression/goto-instrument-wmm-core/x86_safe024_POWER_OPC/safe024.c new file mode 100644 index 00000000000..3284f995c94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_POWER_OPC/safe024.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe024_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe024_POWER_OPC/test.desc new file mode 100644 index 00000000000..36eea731f1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe024_POWER_OPT/safe024.c b/regression/goto-instrument-wmm-core/x86_safe024_POWER_OPT/safe024.c new file mode 100644 index 00000000000..3284f995c94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_POWER_OPT/safe024.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe024_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe024_POWER_OPT/test.desc new file mode 100644 index 00000000000..14b01b41aed --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe024.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe024_PSO_ALL/safe024.c b/regression/goto-instrument-wmm-core/x86_safe024_PSO_ALL/safe024.c new file mode 100644 index 00000000000..3284f995c94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_PSO_ALL/safe024.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe024_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe024_PSO_ALL/test.desc new file mode 100644 index 00000000000..c9bfe11727c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe024_PSO_OPC/safe024.c b/regression/goto-instrument-wmm-core/x86_safe024_PSO_OPC/safe024.c new file mode 100644 index 00000000000..3284f995c94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_PSO_OPC/safe024.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe024_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe024_PSO_OPC/test.desc new file mode 100644 index 00000000000..071f5f0f79e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe024_PSO_OPT/safe024.c b/regression/goto-instrument-wmm-core/x86_safe024_PSO_OPT/safe024.c new file mode 100644 index 00000000000..3284f995c94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_PSO_OPT/safe024.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe024_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe024_PSO_OPT/test.desc new file mode 100644 index 00000000000..b43abe3f174 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe024.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe024_RMO_ALL/safe024.c b/regression/goto-instrument-wmm-core/x86_safe024_RMO_ALL/safe024.c new file mode 100644 index 00000000000..3284f995c94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_RMO_ALL/safe024.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe024_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe024_RMO_ALL/test.desc new file mode 100644 index 00000000000..9bd97e4b522 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe024_RMO_OPC/safe024.c b/regression/goto-instrument-wmm-core/x86_safe024_RMO_OPC/safe024.c new file mode 100644 index 00000000000..3284f995c94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_RMO_OPC/safe024.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe024_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe024_RMO_OPC/test.desc new file mode 100644 index 00000000000..db0c39bb137 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe024_RMO_OPT/safe024.c b/regression/goto-instrument-wmm-core/x86_safe024_RMO_OPT/safe024.c new file mode 100644 index 00000000000..3284f995c94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_RMO_OPT/safe024.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe024_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe024_RMO_OPT/test.desc new file mode 100644 index 00000000000..b7b301377f4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe024.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe024_SC_SAFE/safe024.c b/regression/goto-instrument-wmm-core/x86_safe024_SC_SAFE/safe024.c new file mode 100644 index 00000000000..3284f995c94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_SC_SAFE/safe024.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe024_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe024_SC_SAFE/test.desc new file mode 100644 index 00000000000..9415d685415 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe024_TSO_ALL/safe024.c b/regression/goto-instrument-wmm-core/x86_safe024_TSO_ALL/safe024.c new file mode 100644 index 00000000000..3284f995c94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_TSO_ALL/safe024.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe024_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe024_TSO_ALL/test.desc new file mode 100644 index 00000000000..ab25afb193a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe024_TSO_OPC/safe024.c b/regression/goto-instrument-wmm-core/x86_safe024_TSO_OPC/safe024.c new file mode 100644 index 00000000000..3284f995c94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_TSO_OPC/safe024.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe024_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe024_TSO_OPC/test.desc new file mode 100644 index 00000000000..b0ea90e6aed --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe024.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe024_TSO_OPT/safe024.c b/regression/goto-instrument-wmm-core/x86_safe024_TSO_OPT/safe024.c new file mode 100644 index 00000000000..3284f995c94 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_TSO_OPT/safe024.c @@ -0,0 +1,67 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + __unbuffered_p2_EBX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe024_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe024_TSO_OPT/test.desc new file mode 100644 index 00000000000..54120806b93 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe024_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe024.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe025_CAV11_ERROR/safe025.c b/regression/goto-instrument-wmm-core/x86_safe025_CAV11_ERROR/safe025.c new file mode 100644 index 00000000000..41d4ee278ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_CAV11_ERROR/safe025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe025_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe025_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..3c931313d74 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe025_POWER_ALL/safe025.c b/regression/goto-instrument-wmm-core/x86_safe025_POWER_ALL/safe025.c new file mode 100644 index 00000000000..41d4ee278ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_POWER_ALL/safe025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe025_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe025_POWER_ALL/test.desc new file mode 100644 index 00000000000..fdad6bbf595 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe025_POWER_OPC/safe025.c b/regression/goto-instrument-wmm-core/x86_safe025_POWER_OPC/safe025.c new file mode 100644 index 00000000000..41d4ee278ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_POWER_OPC/safe025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe025_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe025_POWER_OPC/test.desc new file mode 100644 index 00000000000..9465d91775a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe025_POWER_OPT/safe025.c b/regression/goto-instrument-wmm-core/x86_safe025_POWER_OPT/safe025.c new file mode 100644 index 00000000000..41d4ee278ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_POWER_OPT/safe025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe025_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe025_POWER_OPT/test.desc new file mode 100644 index 00000000000..84955e677a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe025.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe025_PSO_ALL/safe025.c b/regression/goto-instrument-wmm-core/x86_safe025_PSO_ALL/safe025.c new file mode 100644 index 00000000000..41d4ee278ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_PSO_ALL/safe025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe025_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe025_PSO_ALL/test.desc new file mode 100644 index 00000000000..6005c633809 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe025_PSO_OPC/safe025.c b/regression/goto-instrument-wmm-core/x86_safe025_PSO_OPC/safe025.c new file mode 100644 index 00000000000..41d4ee278ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_PSO_OPC/safe025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe025_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe025_PSO_OPC/test.desc new file mode 100644 index 00000000000..6f411d37bb6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe025_PSO_OPT/safe025.c b/regression/goto-instrument-wmm-core/x86_safe025_PSO_OPT/safe025.c new file mode 100644 index 00000000000..41d4ee278ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_PSO_OPT/safe025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe025_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe025_PSO_OPT/test.desc new file mode 100644 index 00000000000..d59bef036f1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe025.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe025_RMO_ALL/safe025.c b/regression/goto-instrument-wmm-core/x86_safe025_RMO_ALL/safe025.c new file mode 100644 index 00000000000..41d4ee278ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_RMO_ALL/safe025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe025_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe025_RMO_ALL/test.desc new file mode 100644 index 00000000000..25c1ed363fa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe025_RMO_OPC/safe025.c b/regression/goto-instrument-wmm-core/x86_safe025_RMO_OPC/safe025.c new file mode 100644 index 00000000000..41d4ee278ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_RMO_OPC/safe025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe025_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe025_RMO_OPC/test.desc new file mode 100644 index 00000000000..2f6c913b0b6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe025_RMO_OPT/safe025.c b/regression/goto-instrument-wmm-core/x86_safe025_RMO_OPT/safe025.c new file mode 100644 index 00000000000..41d4ee278ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_RMO_OPT/safe025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe025_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe025_RMO_OPT/test.desc new file mode 100644 index 00000000000..45c57b63fed --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe025.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe025_SC_SAFE/safe025.c b/regression/goto-instrument-wmm-core/x86_safe025_SC_SAFE/safe025.c new file mode 100644 index 00000000000..41d4ee278ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_SC_SAFE/safe025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe025_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe025_SC_SAFE/test.desc new file mode 100644 index 00000000000..d78a40df04c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe025_TSO_ALL/safe025.c b/regression/goto-instrument-wmm-core/x86_safe025_TSO_ALL/safe025.c new file mode 100644 index 00000000000..41d4ee278ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_TSO_ALL/safe025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe025_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe025_TSO_ALL/test.desc new file mode 100644 index 00000000000..5958c2d1445 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe025_TSO_OPC/safe025.c b/regression/goto-instrument-wmm-core/x86_safe025_TSO_OPC/safe025.c new file mode 100644 index 00000000000..41d4ee278ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_TSO_OPC/safe025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe025_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe025_TSO_OPC/test.desc new file mode 100644 index 00000000000..fcbe1b8dfef --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe025.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe025_TSO_OPT/safe025.c b/regression/goto-instrument-wmm-core/x86_safe025_TSO_OPT/safe025.c new file mode 100644 index 00000000000..41d4ee278ba --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_TSO_OPT/safe025.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 2 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe025_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe025_TSO_OPT/test.desc new file mode 100644 index 00000000000..b0debbd1050 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe025_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe025.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe026_CAV11_ERROR/safe026.c b/regression/goto-instrument-wmm-core/x86_safe026_CAV11_ERROR/safe026.c new file mode 100644 index 00000000000..c17a5ba50e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_CAV11_ERROR/safe026.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe026_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe026_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..5155d4d5da2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe026_POWER_ALL/safe026.c b/regression/goto-instrument-wmm-core/x86_safe026_POWER_ALL/safe026.c new file mode 100644 index 00000000000..c17a5ba50e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_POWER_ALL/safe026.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe026_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe026_POWER_ALL/test.desc new file mode 100644 index 00000000000..61dfb3e2f5b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe026_POWER_OPC/safe026.c b/regression/goto-instrument-wmm-core/x86_safe026_POWER_OPC/safe026.c new file mode 100644 index 00000000000..c17a5ba50e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_POWER_OPC/safe026.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe026_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe026_POWER_OPC/test.desc new file mode 100644 index 00000000000..8b724b1234d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe026_POWER_OPT/safe026.c b/regression/goto-instrument-wmm-core/x86_safe026_POWER_OPT/safe026.c new file mode 100644 index 00000000000..c17a5ba50e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_POWER_OPT/safe026.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe026_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe026_POWER_OPT/test.desc new file mode 100644 index 00000000000..4a0bb20b060 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe026.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe026_PSO_ALL/safe026.c b/regression/goto-instrument-wmm-core/x86_safe026_PSO_ALL/safe026.c new file mode 100644 index 00000000000..c17a5ba50e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_PSO_ALL/safe026.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe026_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe026_PSO_ALL/test.desc new file mode 100644 index 00000000000..d1581b4e32c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe026_PSO_OPC/safe026.c b/regression/goto-instrument-wmm-core/x86_safe026_PSO_OPC/safe026.c new file mode 100644 index 00000000000..c17a5ba50e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_PSO_OPC/safe026.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe026_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe026_PSO_OPC/test.desc new file mode 100644 index 00000000000..056c9276e1d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe026_PSO_OPT/safe026.c b/regression/goto-instrument-wmm-core/x86_safe026_PSO_OPT/safe026.c new file mode 100644 index 00000000000..c17a5ba50e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_PSO_OPT/safe026.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe026_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe026_PSO_OPT/test.desc new file mode 100644 index 00000000000..cf35488af3d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe026.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe026_RMO_ALL/safe026.c b/regression/goto-instrument-wmm-core/x86_safe026_RMO_ALL/safe026.c new file mode 100644 index 00000000000..c17a5ba50e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_RMO_ALL/safe026.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe026_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe026_RMO_ALL/test.desc new file mode 100644 index 00000000000..e438e731a6b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe026_RMO_OPC/safe026.c b/regression/goto-instrument-wmm-core/x86_safe026_RMO_OPC/safe026.c new file mode 100644 index 00000000000..c17a5ba50e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_RMO_OPC/safe026.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe026_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe026_RMO_OPC/test.desc new file mode 100644 index 00000000000..1bea39232aa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe026_RMO_OPT/safe026.c b/regression/goto-instrument-wmm-core/x86_safe026_RMO_OPT/safe026.c new file mode 100644 index 00000000000..c17a5ba50e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_RMO_OPT/safe026.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe026_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe026_RMO_OPT/test.desc new file mode 100644 index 00000000000..1044d5aa6c1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe026.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe026_SC_SAFE/safe026.c b/regression/goto-instrument-wmm-core/x86_safe026_SC_SAFE/safe026.c new file mode 100644 index 00000000000..c17a5ba50e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_SC_SAFE/safe026.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe026_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe026_SC_SAFE/test.desc new file mode 100644 index 00000000000..75398d0d61b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe026_TSO_ALL/safe026.c b/regression/goto-instrument-wmm-core/x86_safe026_TSO_ALL/safe026.c new file mode 100644 index 00000000000..c17a5ba50e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_TSO_ALL/safe026.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe026_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe026_TSO_ALL/test.desc new file mode 100644 index 00000000000..f37c2e5cfd2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe026_TSO_OPC/safe026.c b/regression/goto-instrument-wmm-core/x86_safe026_TSO_OPC/safe026.c new file mode 100644 index 00000000000..c17a5ba50e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_TSO_OPC/safe026.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe026_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe026_TSO_OPC/test.desc new file mode 100644 index 00000000000..75a0db6e065 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe026.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe026_TSO_OPT/safe026.c b/regression/goto-instrument-wmm-core/x86_safe026_TSO_OPT/safe026.c new file mode 100644 index 00000000000..c17a5ba50e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_TSO_OPT/safe026.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && __unbuffered_p2_EAX == 2 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe026_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe026_TSO_OPT/test.desc new file mode 100644 index 00000000000..1c7da6913b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe026_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe026.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe027_CAV11_SAFE/safe027.c b/regression/goto-instrument-wmm-core/x86_safe027_CAV11_SAFE/safe027.c new file mode 100644 index 00000000000..3c593736cfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_CAV11_SAFE/safe027.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe027_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe027_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..b7b1cf12219 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe027.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe027_POWER_ALL/safe027.c b/regression/goto-instrument-wmm-core/x86_safe027_POWER_ALL/safe027.c new file mode 100644 index 00000000000..3c593736cfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_POWER_ALL/safe027.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe027_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe027_POWER_ALL/test.desc new file mode 100644 index 00000000000..c5f2c558249 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe027.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe027_POWER_OPC/safe027.c b/regression/goto-instrument-wmm-core/x86_safe027_POWER_OPC/safe027.c new file mode 100644 index 00000000000..3c593736cfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_POWER_OPC/safe027.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe027_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe027_POWER_OPC/test.desc new file mode 100644 index 00000000000..e1d753050b1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe027.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe027_POWER_OPT/safe027.c b/regression/goto-instrument-wmm-core/x86_safe027_POWER_OPT/safe027.c new file mode 100644 index 00000000000..3c593736cfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_POWER_OPT/safe027.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe027_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe027_POWER_OPT/test.desc new file mode 100644 index 00000000000..e15b1cf5a45 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe027.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe027_PSO_ALL/safe027.c b/regression/goto-instrument-wmm-core/x86_safe027_PSO_ALL/safe027.c new file mode 100644 index 00000000000..3c593736cfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_PSO_ALL/safe027.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe027_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe027_PSO_ALL/test.desc new file mode 100644 index 00000000000..4fca65fcdad --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe027.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe027_PSO_OPC/safe027.c b/regression/goto-instrument-wmm-core/x86_safe027_PSO_OPC/safe027.c new file mode 100644 index 00000000000..3c593736cfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_PSO_OPC/safe027.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe027_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe027_PSO_OPC/test.desc new file mode 100644 index 00000000000..016f9a1f5da --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe027.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe027_PSO_OPT/safe027.c b/regression/goto-instrument-wmm-core/x86_safe027_PSO_OPT/safe027.c new file mode 100644 index 00000000000..3c593736cfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_PSO_OPT/safe027.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe027_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe027_PSO_OPT/test.desc new file mode 100644 index 00000000000..a9284f089cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe027.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe027_RMO_ALL/safe027.c b/regression/goto-instrument-wmm-core/x86_safe027_RMO_ALL/safe027.c new file mode 100644 index 00000000000..3c593736cfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_RMO_ALL/safe027.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe027_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe027_RMO_ALL/test.desc new file mode 100644 index 00000000000..c675ea1128d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe027.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe027_RMO_OPC/safe027.c b/regression/goto-instrument-wmm-core/x86_safe027_RMO_OPC/safe027.c new file mode 100644 index 00000000000..3c593736cfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_RMO_OPC/safe027.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe027_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe027_RMO_OPC/test.desc new file mode 100644 index 00000000000..7f868a6fa2a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe027.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe027_RMO_OPT/safe027.c b/regression/goto-instrument-wmm-core/x86_safe027_RMO_OPT/safe027.c new file mode 100644 index 00000000000..3c593736cfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_RMO_OPT/safe027.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe027_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe027_RMO_OPT/test.desc new file mode 100644 index 00000000000..1b45c87aedb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe027.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe027_SC_SAFE/safe027.c b/regression/goto-instrument-wmm-core/x86_safe027_SC_SAFE/safe027.c new file mode 100644 index 00000000000..3c593736cfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_SC_SAFE/safe027.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe027_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe027_SC_SAFE/test.desc new file mode 100644 index 00000000000..a43d6d532e9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe027.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe027_TSO_ALL/safe027.c b/regression/goto-instrument-wmm-core/x86_safe027_TSO_ALL/safe027.c new file mode 100644 index 00000000000..3c593736cfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_TSO_ALL/safe027.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe027_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe027_TSO_ALL/test.desc new file mode 100644 index 00000000000..b4b54b2703c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe027.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe027_TSO_OPC/safe027.c b/regression/goto-instrument-wmm-core/x86_safe027_TSO_OPC/safe027.c new file mode 100644 index 00000000000..3c593736cfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_TSO_OPC/safe027.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe027_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe027_TSO_OPC/test.desc new file mode 100644 index 00000000000..817086efe39 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe027.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe027_TSO_OPT/safe027.c b/regression/goto-instrument-wmm-core/x86_safe027_TSO_OPT/safe027.c new file mode 100644 index 00000000000..3c593736cfa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_TSO_OPT/safe027.c @@ -0,0 +1,75 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p0_EBX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + __unbuffered_p0_EBX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p0_EBX == 0 && + __unbuffered_p2_EAX == 1 && __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe027_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe027_TSO_OPT/test.desc new file mode 100644 index 00000000000..1187b029390 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe027_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe027.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe028_CAV11_SAFE/safe028.c b/regression/goto-instrument-wmm-core/x86_safe028_CAV11_SAFE/safe028.c new file mode 100644 index 00000000000..b7eb39c0e4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_CAV11_SAFE/safe028.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe028_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe028_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..afdc8d0b1f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe028.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe028_POWER_ALL/safe028.c b/regression/goto-instrument-wmm-core/x86_safe028_POWER_ALL/safe028.c new file mode 100644 index 00000000000..b7eb39c0e4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_POWER_ALL/safe028.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe028_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe028_POWER_ALL/test.desc new file mode 100644 index 00000000000..028832e488e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe028.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe028_POWER_OPC/safe028.c b/regression/goto-instrument-wmm-core/x86_safe028_POWER_OPC/safe028.c new file mode 100644 index 00000000000..b7eb39c0e4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_POWER_OPC/safe028.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe028_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe028_POWER_OPC/test.desc new file mode 100644 index 00000000000..9dd8ad98cbb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe028.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe028_POWER_OPT/safe028.c b/regression/goto-instrument-wmm-core/x86_safe028_POWER_OPT/safe028.c new file mode 100644 index 00000000000..b7eb39c0e4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_POWER_OPT/safe028.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe028_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe028_POWER_OPT/test.desc new file mode 100644 index 00000000000..0d54c7ca6a9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe028.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe028_PSO_ALL/safe028.c b/regression/goto-instrument-wmm-core/x86_safe028_PSO_ALL/safe028.c new file mode 100644 index 00000000000..b7eb39c0e4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_PSO_ALL/safe028.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe028_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe028_PSO_ALL/test.desc new file mode 100644 index 00000000000..f1a9ae36b2f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe028.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe028_PSO_OPC/safe028.c b/regression/goto-instrument-wmm-core/x86_safe028_PSO_OPC/safe028.c new file mode 100644 index 00000000000..b7eb39c0e4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_PSO_OPC/safe028.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe028_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe028_PSO_OPC/test.desc new file mode 100644 index 00000000000..8d220e09ab4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe028.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe028_PSO_OPT/safe028.c b/regression/goto-instrument-wmm-core/x86_safe028_PSO_OPT/safe028.c new file mode 100644 index 00000000000..b7eb39c0e4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_PSO_OPT/safe028.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe028_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe028_PSO_OPT/test.desc new file mode 100644 index 00000000000..17585802c3e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe028.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe028_RMO_ALL/safe028.c b/regression/goto-instrument-wmm-core/x86_safe028_RMO_ALL/safe028.c new file mode 100644 index 00000000000..b7eb39c0e4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_RMO_ALL/safe028.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe028_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe028_RMO_ALL/test.desc new file mode 100644 index 00000000000..ebfa2a403da --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe028.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe028_RMO_OPC/safe028.c b/regression/goto-instrument-wmm-core/x86_safe028_RMO_OPC/safe028.c new file mode 100644 index 00000000000..b7eb39c0e4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_RMO_OPC/safe028.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe028_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe028_RMO_OPC/test.desc new file mode 100644 index 00000000000..05eb3a5ae48 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe028.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe028_RMO_OPT/safe028.c b/regression/goto-instrument-wmm-core/x86_safe028_RMO_OPT/safe028.c new file mode 100644 index 00000000000..b7eb39c0e4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_RMO_OPT/safe028.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe028_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe028_RMO_OPT/test.desc new file mode 100644 index 00000000000..422426b58e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe028.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe028_SC_SAFE/safe028.c b/regression/goto-instrument-wmm-core/x86_safe028_SC_SAFE/safe028.c new file mode 100644 index 00000000000..b7eb39c0e4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_SC_SAFE/safe028.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe028_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe028_SC_SAFE/test.desc new file mode 100644 index 00000000000..ad5869cdb1a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe028.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe028_TSO_ALL/safe028.c b/regression/goto-instrument-wmm-core/x86_safe028_TSO_ALL/safe028.c new file mode 100644 index 00000000000..b7eb39c0e4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_TSO_ALL/safe028.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe028_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe028_TSO_ALL/test.desc new file mode 100644 index 00000000000..340ca3e6a0d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe028.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe028_TSO_OPC/safe028.c b/regression/goto-instrument-wmm-core/x86_safe028_TSO_OPC/safe028.c new file mode 100644 index 00000000000..b7eb39c0e4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_TSO_OPC/safe028.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe028_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe028_TSO_OPC/test.desc new file mode 100644 index 00000000000..7a9e337a362 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe028.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe028_TSO_OPT/safe028.c b/regression/goto-instrument-wmm-core/x86_safe028_TSO_OPT/safe028.c new file mode 100644 index 00000000000..b7eb39c0e4e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_TSO_OPT/safe028.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p2_EBX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = x; + __unbuffered_p2_EBX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p2_EAX == 1 && + __unbuffered_p2_EBX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe028_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe028_TSO_OPT/test.desc new file mode 100644 index 00000000000..c42c0ed8f56 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe028_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe028.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe029_CAV11_ERROR/safe029.c b/regression/goto-instrument-wmm-core/x86_safe029_CAV11_ERROR/safe029.c new file mode 100644 index 00000000000..a4850333504 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_CAV11_ERROR/safe029.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe029_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe029_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..a57d7d737bf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe029_POWER_ALL/safe029.c b/regression/goto-instrument-wmm-core/x86_safe029_POWER_ALL/safe029.c new file mode 100644 index 00000000000..a4850333504 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_POWER_ALL/safe029.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe029_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe029_POWER_ALL/test.desc new file mode 100644 index 00000000000..4ce37ec9cf0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe029_POWER_OPC/safe029.c b/regression/goto-instrument-wmm-core/x86_safe029_POWER_OPC/safe029.c new file mode 100644 index 00000000000..a4850333504 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_POWER_OPC/safe029.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe029_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe029_POWER_OPC/test.desc new file mode 100644 index 00000000000..015e95ff360 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe029_POWER_OPT/safe029.c b/regression/goto-instrument-wmm-core/x86_safe029_POWER_OPT/safe029.c new file mode 100644 index 00000000000..a4850333504 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_POWER_OPT/safe029.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe029_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe029_POWER_OPT/test.desc new file mode 100644 index 00000000000..7da77be02af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe029.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe029_PSO_ALL/safe029.c b/regression/goto-instrument-wmm-core/x86_safe029_PSO_ALL/safe029.c new file mode 100644 index 00000000000..a4850333504 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_PSO_ALL/safe029.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe029_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe029_PSO_ALL/test.desc new file mode 100644 index 00000000000..87f78c7b522 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe029_PSO_OPC/safe029.c b/regression/goto-instrument-wmm-core/x86_safe029_PSO_OPC/safe029.c new file mode 100644 index 00000000000..a4850333504 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_PSO_OPC/safe029.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe029_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe029_PSO_OPC/test.desc new file mode 100644 index 00000000000..8107ce752c5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe029_PSO_OPT/safe029.c b/regression/goto-instrument-wmm-core/x86_safe029_PSO_OPT/safe029.c new file mode 100644 index 00000000000..a4850333504 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_PSO_OPT/safe029.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe029_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe029_PSO_OPT/test.desc new file mode 100644 index 00000000000..317c8f96e55 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe029.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe029_RMO_ALL/safe029.c b/regression/goto-instrument-wmm-core/x86_safe029_RMO_ALL/safe029.c new file mode 100644 index 00000000000..a4850333504 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_RMO_ALL/safe029.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe029_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe029_RMO_ALL/test.desc new file mode 100644 index 00000000000..994b8613dff --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe029_RMO_OPC/safe029.c b/regression/goto-instrument-wmm-core/x86_safe029_RMO_OPC/safe029.c new file mode 100644 index 00000000000..a4850333504 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_RMO_OPC/safe029.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe029_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe029_RMO_OPC/test.desc new file mode 100644 index 00000000000..5d890e7dc22 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe029_RMO_OPT/safe029.c b/regression/goto-instrument-wmm-core/x86_safe029_RMO_OPT/safe029.c new file mode 100644 index 00000000000..a4850333504 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_RMO_OPT/safe029.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe029_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe029_RMO_OPT/test.desc new file mode 100644 index 00000000000..9f539f24bf1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe029.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe029_SC_SAFE/safe029.c b/regression/goto-instrument-wmm-core/x86_safe029_SC_SAFE/safe029.c new file mode 100644 index 00000000000..a4850333504 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_SC_SAFE/safe029.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe029_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe029_SC_SAFE/test.desc new file mode 100644 index 00000000000..65396879acb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe029.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe029_TSO_ALL/safe029.c b/regression/goto-instrument-wmm-core/x86_safe029_TSO_ALL/safe029.c new file mode 100644 index 00000000000..a4850333504 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_TSO_ALL/safe029.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe029_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe029_TSO_ALL/test.desc new file mode 100644 index 00000000000..8875def383d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe029.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe029_TSO_OPC/safe029.c b/regression/goto-instrument-wmm-core/x86_safe029_TSO_OPC/safe029.c new file mode 100644 index 00000000000..a4850333504 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_TSO_OPC/safe029.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe029_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe029_TSO_OPC/test.desc new file mode 100644 index 00000000000..46061714822 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe029.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe029_TSO_OPT/safe029.c b/regression/goto-instrument-wmm-core/x86_safe029_TSO_OPT/safe029.c new file mode 100644 index 00000000000..a4850333504 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_TSO_OPT/safe029.c @@ -0,0 +1,50 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe029_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe029_TSO_OPT/test.desc new file mode 100644 index 00000000000..eb5e8c8f80f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe029_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe029.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe030_CAV11_ERROR/safe030.c b/regression/goto-instrument-wmm-core/x86_safe030_CAV11_ERROR/safe030.c new file mode 100644 index 00000000000..9ac6a9668a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_CAV11_ERROR/safe030.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe030_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe030_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..567039e0771 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe030_POWER_ALL/safe030.c b/regression/goto-instrument-wmm-core/x86_safe030_POWER_ALL/safe030.c new file mode 100644 index 00000000000..9ac6a9668a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_POWER_ALL/safe030.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe030_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe030_POWER_ALL/test.desc new file mode 100644 index 00000000000..7c9cc597829 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe030_POWER_OPC/safe030.c b/regression/goto-instrument-wmm-core/x86_safe030_POWER_OPC/safe030.c new file mode 100644 index 00000000000..9ac6a9668a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_POWER_OPC/safe030.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe030_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe030_POWER_OPC/test.desc new file mode 100644 index 00000000000..fff826b1a3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe030_POWER_OPT/safe030.c b/regression/goto-instrument-wmm-core/x86_safe030_POWER_OPT/safe030.c new file mode 100644 index 00000000000..9ac6a9668a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_POWER_OPT/safe030.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe030_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe030_POWER_OPT/test.desc new file mode 100644 index 00000000000..3b5d85a3e7d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe030.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe030_PSO_ALL/safe030.c b/regression/goto-instrument-wmm-core/x86_safe030_PSO_ALL/safe030.c new file mode 100644 index 00000000000..9ac6a9668a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_PSO_ALL/safe030.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe030_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe030_PSO_ALL/test.desc new file mode 100644 index 00000000000..c125f18740f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe030_PSO_OPC/safe030.c b/regression/goto-instrument-wmm-core/x86_safe030_PSO_OPC/safe030.c new file mode 100644 index 00000000000..9ac6a9668a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_PSO_OPC/safe030.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe030_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe030_PSO_OPC/test.desc new file mode 100644 index 00000000000..de546d40589 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe030_PSO_OPT/safe030.c b/regression/goto-instrument-wmm-core/x86_safe030_PSO_OPT/safe030.c new file mode 100644 index 00000000000..9ac6a9668a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_PSO_OPT/safe030.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe030_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe030_PSO_OPT/test.desc new file mode 100644 index 00000000000..9df0b2b5a12 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe030.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe030_RMO_ALL/safe030.c b/regression/goto-instrument-wmm-core/x86_safe030_RMO_ALL/safe030.c new file mode 100644 index 00000000000..9ac6a9668a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_RMO_ALL/safe030.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe030_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe030_RMO_ALL/test.desc new file mode 100644 index 00000000000..e916131f597 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe030_RMO_OPC/safe030.c b/regression/goto-instrument-wmm-core/x86_safe030_RMO_OPC/safe030.c new file mode 100644 index 00000000000..9ac6a9668a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_RMO_OPC/safe030.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe030_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe030_RMO_OPC/test.desc new file mode 100644 index 00000000000..21e90a81f9c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe030_RMO_OPT/safe030.c b/regression/goto-instrument-wmm-core/x86_safe030_RMO_OPT/safe030.c new file mode 100644 index 00000000000..9ac6a9668a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_RMO_OPT/safe030.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe030_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe030_RMO_OPT/test.desc new file mode 100644 index 00000000000..7fca63b52ab --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe030.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe030_SC_SAFE/safe030.c b/regression/goto-instrument-wmm-core/x86_safe030_SC_SAFE/safe030.c new file mode 100644 index 00000000000..9ac6a9668a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_SC_SAFE/safe030.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe030_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe030_SC_SAFE/test.desc new file mode 100644 index 00000000000..514b50646a5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe030.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe030_TSO_ALL/safe030.c b/regression/goto-instrument-wmm-core/x86_safe030_TSO_ALL/safe030.c new file mode 100644 index 00000000000..9ac6a9668a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_TSO_ALL/safe030.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe030_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe030_TSO_ALL/test.desc new file mode 100644 index 00000000000..076957db5b2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe030.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe030_TSO_OPC/safe030.c b/regression/goto-instrument-wmm-core/x86_safe030_TSO_OPC/safe030.c new file mode 100644 index 00000000000..9ac6a9668a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_TSO_OPC/safe030.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe030_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe030_TSO_OPC/test.desc new file mode 100644 index 00000000000..ba25571693e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe030.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe030_TSO_OPT/safe030.c b/regression/goto-instrument-wmm-core/x86_safe030_TSO_OPT/safe030.c new file mode 100644 index 00000000000..9ac6a9668a6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_TSO_OPT/safe030.c @@ -0,0 +1,62 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && z == 2), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe030_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe030_TSO_OPT/test.desc new file mode 100644 index 00000000000..27c268eb230 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe030_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe030.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe031_CAV11_ERROR/safe031.c b/regression/goto-instrument-wmm-core/x86_safe031_CAV11_ERROR/safe031.c new file mode 100644 index 00000000000..2c196949472 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_CAV11_ERROR/safe031.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe031_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe031_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..78eb82e90f3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe031_POWER_ALL/safe031.c b/regression/goto-instrument-wmm-core/x86_safe031_POWER_ALL/safe031.c new file mode 100644 index 00000000000..2c196949472 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_POWER_ALL/safe031.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe031_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe031_POWER_ALL/test.desc new file mode 100644 index 00000000000..3e02ef5d585 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe031_POWER_OPC/safe031.c b/regression/goto-instrument-wmm-core/x86_safe031_POWER_OPC/safe031.c new file mode 100644 index 00000000000..2c196949472 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_POWER_OPC/safe031.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe031_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe031_POWER_OPC/test.desc new file mode 100644 index 00000000000..b668f792fb9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe031_POWER_OPT/safe031.c b/regression/goto-instrument-wmm-core/x86_safe031_POWER_OPT/safe031.c new file mode 100644 index 00000000000..2c196949472 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_POWER_OPT/safe031.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe031_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe031_POWER_OPT/test.desc new file mode 100644 index 00000000000..8624174b0b4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe031.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe031_PSO_ALL/safe031.c b/regression/goto-instrument-wmm-core/x86_safe031_PSO_ALL/safe031.c new file mode 100644 index 00000000000..2c196949472 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_PSO_ALL/safe031.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe031_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe031_PSO_ALL/test.desc new file mode 100644 index 00000000000..c2c37587e39 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe031_PSO_OPC/safe031.c b/regression/goto-instrument-wmm-core/x86_safe031_PSO_OPC/safe031.c new file mode 100644 index 00000000000..2c196949472 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_PSO_OPC/safe031.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe031_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe031_PSO_OPC/test.desc new file mode 100644 index 00000000000..9e32de91b0b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe031_PSO_OPT/safe031.c b/regression/goto-instrument-wmm-core/x86_safe031_PSO_OPT/safe031.c new file mode 100644 index 00000000000..2c196949472 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_PSO_OPT/safe031.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe031_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe031_PSO_OPT/test.desc new file mode 100644 index 00000000000..811a259a82f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe031.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe031_RMO_ALL/safe031.c b/regression/goto-instrument-wmm-core/x86_safe031_RMO_ALL/safe031.c new file mode 100644 index 00000000000..2c196949472 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_RMO_ALL/safe031.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe031_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe031_RMO_ALL/test.desc new file mode 100644 index 00000000000..6bf9c29febb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe031_RMO_OPC/safe031.c b/regression/goto-instrument-wmm-core/x86_safe031_RMO_OPC/safe031.c new file mode 100644 index 00000000000..2c196949472 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_RMO_OPC/safe031.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe031_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe031_RMO_OPC/test.desc new file mode 100644 index 00000000000..c1b74f1d755 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe031_RMO_OPT/safe031.c b/regression/goto-instrument-wmm-core/x86_safe031_RMO_OPT/safe031.c new file mode 100644 index 00000000000..2c196949472 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_RMO_OPT/safe031.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe031_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe031_RMO_OPT/test.desc new file mode 100644 index 00000000000..11a9b938619 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe031.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe031_SC_SAFE/safe031.c b/regression/goto-instrument-wmm-core/x86_safe031_SC_SAFE/safe031.c new file mode 100644 index 00000000000..2c196949472 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_SC_SAFE/safe031.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe031_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe031_SC_SAFE/test.desc new file mode 100644 index 00000000000..19decd2e7f2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe031_TSO_ALL/safe031.c b/regression/goto-instrument-wmm-core/x86_safe031_TSO_ALL/safe031.c new file mode 100644 index 00000000000..2c196949472 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_TSO_ALL/safe031.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe031_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe031_TSO_ALL/test.desc new file mode 100644 index 00000000000..87b89adf120 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe031_TSO_OPC/safe031.c b/regression/goto-instrument-wmm-core/x86_safe031_TSO_OPC/safe031.c new file mode 100644 index 00000000000..2c196949472 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_TSO_OPC/safe031.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe031_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe031_TSO_OPC/test.desc new file mode 100644 index 00000000000..93ecb193f50 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe031.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe031_TSO_OPT/safe031.c b/regression/goto-instrument-wmm-core/x86_safe031_TSO_OPT/safe031.c new file mode 100644 index 00000000000..2c196949472 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_TSO_OPT/safe031.c @@ -0,0 +1,64 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 2; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && z == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe031_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe031_TSO_OPT/test.desc new file mode 100644 index 00000000000..4440318cb3f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe031_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe031.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe032_CAV11_ERROR/safe032.c b/regression/goto-instrument-wmm-core/x86_safe032_CAV11_ERROR/safe032.c new file mode 100644 index 00000000000..3fb300b84a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_CAV11_ERROR/safe032.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe032_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe032_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..9cb9a0faf19 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe032_POWER_ALL/safe032.c b/regression/goto-instrument-wmm-core/x86_safe032_POWER_ALL/safe032.c new file mode 100644 index 00000000000..3fb300b84a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_POWER_ALL/safe032.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe032_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe032_POWER_ALL/test.desc new file mode 100644 index 00000000000..b9f8d46e928 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe032_POWER_OPC/safe032.c b/regression/goto-instrument-wmm-core/x86_safe032_POWER_OPC/safe032.c new file mode 100644 index 00000000000..3fb300b84a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_POWER_OPC/safe032.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe032_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe032_POWER_OPC/test.desc new file mode 100644 index 00000000000..dc5eb7173af --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe032_POWER_OPT/safe032.c b/regression/goto-instrument-wmm-core/x86_safe032_POWER_OPT/safe032.c new file mode 100644 index 00000000000..3fb300b84a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_POWER_OPT/safe032.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe032_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe032_POWER_OPT/test.desc new file mode 100644 index 00000000000..3a1090c8d3d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe032.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe032_PSO_ALL/safe032.c b/regression/goto-instrument-wmm-core/x86_safe032_PSO_ALL/safe032.c new file mode 100644 index 00000000000..3fb300b84a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_PSO_ALL/safe032.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe032_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe032_PSO_ALL/test.desc new file mode 100644 index 00000000000..d6993599f25 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe032_PSO_OPC/safe032.c b/regression/goto-instrument-wmm-core/x86_safe032_PSO_OPC/safe032.c new file mode 100644 index 00000000000..3fb300b84a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_PSO_OPC/safe032.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe032_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe032_PSO_OPC/test.desc new file mode 100644 index 00000000000..b4249d5b79c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe032_PSO_OPT/safe032.c b/regression/goto-instrument-wmm-core/x86_safe032_PSO_OPT/safe032.c new file mode 100644 index 00000000000..3fb300b84a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_PSO_OPT/safe032.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe032_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe032_PSO_OPT/test.desc new file mode 100644 index 00000000000..e3b10806cca --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe032.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe032_RMO_ALL/safe032.c b/regression/goto-instrument-wmm-core/x86_safe032_RMO_ALL/safe032.c new file mode 100644 index 00000000000..3fb300b84a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_RMO_ALL/safe032.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe032_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe032_RMO_ALL/test.desc new file mode 100644 index 00000000000..461d4a155f7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe032_RMO_OPC/safe032.c b/regression/goto-instrument-wmm-core/x86_safe032_RMO_OPC/safe032.c new file mode 100644 index 00000000000..3fb300b84a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_RMO_OPC/safe032.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe032_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe032_RMO_OPC/test.desc new file mode 100644 index 00000000000..bba60a89aa0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe032_RMO_OPT/safe032.c b/regression/goto-instrument-wmm-core/x86_safe032_RMO_OPT/safe032.c new file mode 100644 index 00000000000..3fb300b84a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_RMO_OPT/safe032.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe032_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe032_RMO_OPT/test.desc new file mode 100644 index 00000000000..6bb1b6238fe --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe032.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe032_SC_SAFE/safe032.c b/regression/goto-instrument-wmm-core/x86_safe032_SC_SAFE/safe032.c new file mode 100644 index 00000000000..3fb300b84a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_SC_SAFE/safe032.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe032_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe032_SC_SAFE/test.desc new file mode 100644 index 00000000000..83963e8da4c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe032_TSO_ALL/safe032.c b/regression/goto-instrument-wmm-core/x86_safe032_TSO_ALL/safe032.c new file mode 100644 index 00000000000..3fb300b84a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_TSO_ALL/safe032.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe032_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe032_TSO_ALL/test.desc new file mode 100644 index 00000000000..94137b74814 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe032_TSO_OPC/safe032.c b/regression/goto-instrument-wmm-core/x86_safe032_TSO_OPC/safe032.c new file mode 100644 index 00000000000..3fb300b84a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_TSO_OPC/safe032.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe032_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe032_TSO_OPC/test.desc new file mode 100644 index 00000000000..b29559353eb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe032.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe032_TSO_OPT/safe032.c b/regression/goto-instrument-wmm-core/x86_safe032_TSO_OPT/safe032.c new file mode 100644 index 00000000000..3fb300b84a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_TSO_OPT/safe032.c @@ -0,0 +1,65 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + x = 2; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(x == 2 && y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe032_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe032_TSO_OPT/test.desc new file mode 100644 index 00000000000..597de7ea345 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe032_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe032.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe033_CAV11_ERROR/safe033.c b/regression/goto-instrument-wmm-core/x86_safe033_CAV11_ERROR/safe033.c new file mode 100644 index 00000000000..4e2844e2971 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_CAV11_ERROR/safe033.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe033_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe033_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..fb431ce278f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe033.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe033_POWER_ALL/safe033.c b/regression/goto-instrument-wmm-core/x86_safe033_POWER_ALL/safe033.c new file mode 100644 index 00000000000..4e2844e2971 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_POWER_ALL/safe033.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe033_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe033_POWER_ALL/test.desc new file mode 100644 index 00000000000..1de5aaf89c7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe033.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe033_POWER_OPC/safe033.c b/regression/goto-instrument-wmm-core/x86_safe033_POWER_OPC/safe033.c new file mode 100644 index 00000000000..4e2844e2971 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_POWER_OPC/safe033.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe033_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe033_POWER_OPC/test.desc new file mode 100644 index 00000000000..8009a1b4b4d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe033.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe033_POWER_OPT/safe033.c b/regression/goto-instrument-wmm-core/x86_safe033_POWER_OPT/safe033.c new file mode 100644 index 00000000000..4e2844e2971 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_POWER_OPT/safe033.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe033_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe033_POWER_OPT/test.desc new file mode 100644 index 00000000000..e0c31786651 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe033.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe033_PSO_ALL/safe033.c b/regression/goto-instrument-wmm-core/x86_safe033_PSO_ALL/safe033.c new file mode 100644 index 00000000000..4e2844e2971 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_PSO_ALL/safe033.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe033_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe033_PSO_ALL/test.desc new file mode 100644 index 00000000000..f163db3f015 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe033.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe033_PSO_OPC/safe033.c b/regression/goto-instrument-wmm-core/x86_safe033_PSO_OPC/safe033.c new file mode 100644 index 00000000000..4e2844e2971 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_PSO_OPC/safe033.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe033_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe033_PSO_OPC/test.desc new file mode 100644 index 00000000000..045a893eeae --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe033.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe033_PSO_OPT/safe033.c b/regression/goto-instrument-wmm-core/x86_safe033_PSO_OPT/safe033.c new file mode 100644 index 00000000000..4e2844e2971 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_PSO_OPT/safe033.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe033_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe033_PSO_OPT/test.desc new file mode 100644 index 00000000000..68fe598aa57 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe033.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe033_RMO_ALL/safe033.c b/regression/goto-instrument-wmm-core/x86_safe033_RMO_ALL/safe033.c new file mode 100644 index 00000000000..4e2844e2971 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_RMO_ALL/safe033.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe033_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe033_RMO_ALL/test.desc new file mode 100644 index 00000000000..b4a82e09985 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe033.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe033_RMO_OPC/safe033.c b/regression/goto-instrument-wmm-core/x86_safe033_RMO_OPC/safe033.c new file mode 100644 index 00000000000..4e2844e2971 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_RMO_OPC/safe033.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe033_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe033_RMO_OPC/test.desc new file mode 100644 index 00000000000..891b2a8f0e2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe033.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe033_RMO_OPT/safe033.c b/regression/goto-instrument-wmm-core/x86_safe033_RMO_OPT/safe033.c new file mode 100644 index 00000000000..4e2844e2971 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_RMO_OPT/safe033.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe033_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe033_RMO_OPT/test.desc new file mode 100644 index 00000000000..78df583ca37 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe033.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe033_SC_SAFE/safe033.c b/regression/goto-instrument-wmm-core/x86_safe033_SC_SAFE/safe033.c new file mode 100644 index 00000000000..4e2844e2971 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_SC_SAFE/safe033.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe033_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe033_SC_SAFE/test.desc new file mode 100644 index 00000000000..79e9969a9a1 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe033.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe033_TSO_ALL/safe033.c b/regression/goto-instrument-wmm-core/x86_safe033_TSO_ALL/safe033.c new file mode 100644 index 00000000000..4e2844e2971 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_TSO_ALL/safe033.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe033_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe033_TSO_ALL/test.desc new file mode 100644 index 00000000000..56ca9744221 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +CORE +safe033.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe033_TSO_OPC/safe033.c b/regression/goto-instrument-wmm-core/x86_safe033_TSO_OPC/safe033.c new file mode 100644 index 00000000000..4e2844e2971 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_TSO_OPC/safe033.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe033_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe033_TSO_OPC/test.desc new file mode 100644 index 00000000000..7b8bfdf09e5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +CORE +safe033.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe033_TSO_OPT/safe033.c b/regression/goto-instrument-wmm-core/x86_safe033_TSO_OPT/safe033.c new file mode 100644 index 00000000000..4e2844e2971 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_TSO_OPT/safe033.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe033_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe033_TSO_OPT/test.desc new file mode 100644 index 00000000000..98cfcc228be --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe033_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe033.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe034_CAV11_ERROR/safe034.c b/regression/goto-instrument-wmm-core/x86_safe034_CAV11_ERROR/safe034.c new file mode 100644 index 00000000000..a3efa0ab7c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_CAV11_ERROR/safe034.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe034_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe034_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..3cb7ed8e9f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe034.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe034_POWER_ALL/safe034.c b/regression/goto-instrument-wmm-core/x86_safe034_POWER_ALL/safe034.c new file mode 100644 index 00000000000..a3efa0ab7c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_POWER_ALL/safe034.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe034_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe034_POWER_ALL/test.desc new file mode 100644 index 00000000000..9f12fabbb71 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe034.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe034_POWER_OPC/safe034.c b/regression/goto-instrument-wmm-core/x86_safe034_POWER_OPC/safe034.c new file mode 100644 index 00000000000..a3efa0ab7c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_POWER_OPC/safe034.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe034_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe034_POWER_OPC/test.desc new file mode 100644 index 00000000000..b9d4f347e93 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe034.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe034_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe034_POWER_OPT/test.desc index db9371238d9..45de74c2709 100644 --- a/regression/goto-instrument-wmm-core/x86_safe034_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_safe034_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk safe034.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_safe034_PSO_ALL/safe034.c b/regression/goto-instrument-wmm-core/x86_safe034_PSO_ALL/safe034.c new file mode 100644 index 00000000000..a3efa0ab7c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_PSO_ALL/safe034.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe034_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe034_PSO_ALL/test.desc new file mode 100644 index 00000000000..bb59d6f1451 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe034.c +PSO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe034_PSO_OPC/safe034.c b/regression/goto-instrument-wmm-core/x86_safe034_PSO_OPC/safe034.c new file mode 100644 index 00000000000..a3efa0ab7c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_PSO_OPC/safe034.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe034_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe034_PSO_OPC/test.desc new file mode 100644 index 00000000000..5e3350d054f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe034.c +PSO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe034_PSO_OPT/safe034.c b/regression/goto-instrument-wmm-core/x86_safe034_PSO_OPT/safe034.c new file mode 100644 index 00000000000..a3efa0ab7c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_PSO_OPT/safe034.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe034_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe034_PSO_OPT/test.desc new file mode 100644 index 00000000000..fc56a0c7b76 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe034.c +PSO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe034_RMO_ALL/safe034.c b/regression/goto-instrument-wmm-core/x86_safe034_RMO_ALL/safe034.c new file mode 100644 index 00000000000..a3efa0ab7c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_RMO_ALL/safe034.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe034_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe034_RMO_ALL/test.desc new file mode 100644 index 00000000000..52b606a0d2c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe034.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe034_RMO_OPC/safe034.c b/regression/goto-instrument-wmm-core/x86_safe034_RMO_OPC/safe034.c new file mode 100644 index 00000000000..a3efa0ab7c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_RMO_OPC/safe034.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe034_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe034_RMO_OPC/test.desc new file mode 100644 index 00000000000..d59ad1b3d36 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe034.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe034_RMO_OPT/safe034.c b/regression/goto-instrument-wmm-core/x86_safe034_RMO_OPT/safe034.c new file mode 100644 index 00000000000..a3efa0ab7c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_RMO_OPT/safe034.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe034_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe034_RMO_OPT/test.desc new file mode 100644 index 00000000000..6edf397ad3d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe034.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe034_SC_SAFE/safe034.c b/regression/goto-instrument-wmm-core/x86_safe034_SC_SAFE/safe034.c new file mode 100644 index 00000000000..a3efa0ab7c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_SC_SAFE/safe034.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe034_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe034_SC_SAFE/test.desc new file mode 100644 index 00000000000..b2a9eea3b2c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe034.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe034_TSO_ALL/safe034.c b/regression/goto-instrument-wmm-core/x86_safe034_TSO_ALL/safe034.c new file mode 100644 index 00000000000..a3efa0ab7c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_TSO_ALL/safe034.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe034_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe034_TSO_ALL/test.desc new file mode 100644 index 00000000000..ceb84d690b0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe034.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe034_TSO_OPC/safe034.c b/regression/goto-instrument-wmm-core/x86_safe034_TSO_OPC/safe034.c new file mode 100644 index 00000000000..a3efa0ab7c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_TSO_OPC/safe034.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe034_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe034_TSO_OPC/test.desc new file mode 100644 index 00000000000..be63e7406e3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe034.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe034_TSO_OPT/safe034.c b/regression/goto-instrument-wmm-core/x86_safe034_TSO_OPT/safe034.c new file mode 100644 index 00000000000..a3efa0ab7c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_TSO_OPT/safe034.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(z == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe034_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe034_TSO_OPT/test.desc new file mode 100644 index 00000000000..82659f77b61 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe034_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe034.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe035_CAV11_ERROR/safe035.c b/regression/goto-instrument-wmm-core/x86_safe035_CAV11_ERROR/safe035.c new file mode 100644 index 00000000000..88a4f15d8bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_CAV11_ERROR/safe035.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe035_CAV11_ERROR/test.desc b/regression/goto-instrument-wmm-core/x86_safe035_CAV11_ERROR/test.desc new file mode 100644 index 00000000000..d950eaf6c2b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_CAV11_ERROR/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +CAV11 ERROR +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe035_POWER_ALL/safe035.c b/regression/goto-instrument-wmm-core/x86_safe035_POWER_ALL/safe035.c new file mode 100644 index 00000000000..88a4f15d8bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_POWER_ALL/safe035.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe035_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe035_POWER_ALL/test.desc new file mode 100644 index 00000000000..98d22316651 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe035.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe035_POWER_OPC/safe035.c b/regression/goto-instrument-wmm-core/x86_safe035_POWER_OPC/safe035.c new file mode 100644 index 00000000000..88a4f15d8bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_POWER_OPC/safe035.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe035_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe035_POWER_OPC/test.desc new file mode 100644 index 00000000000..dac30e3f802 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +FUTURE +safe035.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe035_POWER_OPT/safe035.c b/regression/goto-instrument-wmm-core/x86_safe035_POWER_OPT/safe035.c new file mode 100644 index 00000000000..88a4f15d8bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_POWER_OPT/safe035.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe035_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe035_POWER_OPT/test.desc new file mode 100644 index 00000000000..e25285c39bf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +FUTURE glpk +safe035.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe035_PSO_ALL/safe035.c b/regression/goto-instrument-wmm-core/x86_safe035_PSO_ALL/safe035.c new file mode 100644 index 00000000000..88a4f15d8bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_PSO_ALL/safe035.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe035_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe035_PSO_ALL/test.desc new file mode 100644 index 00000000000..ed18b4c46c2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe035_PSO_OPC/safe035.c b/regression/goto-instrument-wmm-core/x86_safe035_PSO_OPC/safe035.c new file mode 100644 index 00000000000..88a4f15d8bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_PSO_OPC/safe035.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe035_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe035_PSO_OPC/test.desc new file mode 100644 index 00000000000..347857a2b34 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe035_PSO_OPT/safe035.c b/regression/goto-instrument-wmm-core/x86_safe035_PSO_OPT/safe035.c new file mode 100644 index 00000000000..88a4f15d8bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_PSO_OPT/safe035.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe035_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe035_PSO_OPT/test.desc new file mode 100644 index 00000000000..8d71a481b29 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe035.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe035_RMO_ALL/safe035.c b/regression/goto-instrument-wmm-core/x86_safe035_RMO_ALL/safe035.c new file mode 100644 index 00000000000..88a4f15d8bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_RMO_ALL/safe035.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe035_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe035_RMO_ALL/test.desc new file mode 100644 index 00000000000..47350e18f17 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe035_RMO_OPC/safe035.c b/regression/goto-instrument-wmm-core/x86_safe035_RMO_OPC/safe035.c new file mode 100644 index 00000000000..88a4f15d8bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_RMO_OPC/safe035.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe035_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe035_RMO_OPC/test.desc new file mode 100644 index 00000000000..5e14638a78b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe035_RMO_OPT/safe035.c b/regression/goto-instrument-wmm-core/x86_safe035_RMO_OPT/safe035.c new file mode 100644 index 00000000000..88a4f15d8bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_RMO_OPT/safe035.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe035_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe035_RMO_OPT/test.desc new file mode 100644 index 00000000000..811a5149ada --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe035.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe035_SC_SAFE/safe035.c b/regression/goto-instrument-wmm-core/x86_safe035_SC_SAFE/safe035.c new file mode 100644 index 00000000000..88a4f15d8bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_SC_SAFE/safe035.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe035_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe035_SC_SAFE/test.desc new file mode 100644 index 00000000000..9948c1807f6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe035_TSO_ALL/safe035.c b/regression/goto-instrument-wmm-core/x86_safe035_TSO_ALL/safe035.c new file mode 100644 index 00000000000..88a4f15d8bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_TSO_ALL/safe035.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe035_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe035_TSO_ALL/test.desc new file mode 100644 index 00000000000..4d49e9a4b60 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe035_TSO_OPC/safe035.c b/regression/goto-instrument-wmm-core/x86_safe035_TSO_OPC/safe035.c new file mode 100644 index 00000000000..88a4f15d8bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_TSO_OPC/safe035.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe035_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe035_TSO_OPC/test.desc new file mode 100644 index 00000000000..1e32a5717f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe035.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe035_TSO_OPT/safe035.c b/regression/goto-instrument-wmm-core/x86_safe035_TSO_OPT/safe035.c new file mode 100644 index 00000000000..88a4f15d8bb --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_TSO_OPT/safe035.c @@ -0,0 +1,68 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 2; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(y == 2 && __unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe035_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe035_TSO_OPT/test.desc new file mode 100644 index 00000000000..864bde5c4f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe035_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe035.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe036_CAV11_SAFE/safe036.c b/regression/goto-instrument-wmm-core/x86_safe036_CAV11_SAFE/safe036.c new file mode 100644 index 00000000000..6dd1be564c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_CAV11_SAFE/safe036.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe036_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe036_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..3407a07db79 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe036_POWER_ALL/safe036.c b/regression/goto-instrument-wmm-core/x86_safe036_POWER_ALL/safe036.c new file mode 100644 index 00000000000..6dd1be564c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_POWER_ALL/safe036.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe036_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe036_POWER_ALL/test.desc new file mode 100644 index 00000000000..b0fc4763e33 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe036_POWER_OPC/safe036.c b/regression/goto-instrument-wmm-core/x86_safe036_POWER_OPC/safe036.c new file mode 100644 index 00000000000..6dd1be564c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_POWER_OPC/safe036.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe036_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe036_POWER_OPC/test.desc new file mode 100644 index 00000000000..a5e652a72cf --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe036_POWER_OPT/safe036.c b/regression/goto-instrument-wmm-core/x86_safe036_POWER_OPT/safe036.c new file mode 100644 index 00000000000..6dd1be564c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_POWER_OPT/safe036.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe036_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe036_POWER_OPT/test.desc new file mode 100644 index 00000000000..53a1d169351 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe036.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe036_PSO_ALL/safe036.c b/regression/goto-instrument-wmm-core/x86_safe036_PSO_ALL/safe036.c new file mode 100644 index 00000000000..6dd1be564c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_PSO_ALL/safe036.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe036_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe036_PSO_ALL/test.desc new file mode 100644 index 00000000000..8210364ea7b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe036_PSO_OPC/safe036.c b/regression/goto-instrument-wmm-core/x86_safe036_PSO_OPC/safe036.c new file mode 100644 index 00000000000..6dd1be564c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_PSO_OPC/safe036.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe036_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe036_PSO_OPC/test.desc new file mode 100644 index 00000000000..cb8fe6db8c0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe036_PSO_OPT/safe036.c b/regression/goto-instrument-wmm-core/x86_safe036_PSO_OPT/safe036.c new file mode 100644 index 00000000000..6dd1be564c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_PSO_OPT/safe036.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe036_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe036_PSO_OPT/test.desc new file mode 100644 index 00000000000..926e2537ee8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe036.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe036_RMO_ALL/safe036.c b/regression/goto-instrument-wmm-core/x86_safe036_RMO_ALL/safe036.c new file mode 100644 index 00000000000..6dd1be564c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_RMO_ALL/safe036.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe036_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe036_RMO_ALL/test.desc new file mode 100644 index 00000000000..3d2b5462ddd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe036_RMO_OPC/safe036.c b/regression/goto-instrument-wmm-core/x86_safe036_RMO_OPC/safe036.c new file mode 100644 index 00000000000..6dd1be564c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_RMO_OPC/safe036.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe036_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe036_RMO_OPC/test.desc new file mode 100644 index 00000000000..2af3db35a67 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe036_RMO_OPT/safe036.c b/regression/goto-instrument-wmm-core/x86_safe036_RMO_OPT/safe036.c new file mode 100644 index 00000000000..6dd1be564c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_RMO_OPT/safe036.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe036_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe036_RMO_OPT/test.desc new file mode 100644 index 00000000000..889e120c442 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe036.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe036_SC_SAFE/safe036.c b/regression/goto-instrument-wmm-core/x86_safe036_SC_SAFE/safe036.c new file mode 100644 index 00000000000..6dd1be564c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_SC_SAFE/safe036.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe036_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe036_SC_SAFE/test.desc new file mode 100644 index 00000000000..17b3650d66f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe036_TSO_ALL/safe036.c b/regression/goto-instrument-wmm-core/x86_safe036_TSO_ALL/safe036.c new file mode 100644 index 00000000000..6dd1be564c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_TSO_ALL/safe036.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe036_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe036_TSO_ALL/test.desc new file mode 100644 index 00000000000..e3ff5b04c40 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe036_TSO_OPC/safe036.c b/regression/goto-instrument-wmm-core/x86_safe036_TSO_OPC/safe036.c new file mode 100644 index 00000000000..6dd1be564c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_TSO_OPC/safe036.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe036_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe036_TSO_OPC/test.desc new file mode 100644 index 00000000000..99623014616 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe036.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe036_TSO_OPT/safe036.c b/regression/goto-instrument-wmm-core/x86_safe036_TSO_OPT/safe036.c new file mode 100644 index 00000000000..6dd1be564c6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_TSO_OPT/safe036.c @@ -0,0 +1,54 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + y = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe036_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe036_TSO_OPT/test.desc new file mode 100644 index 00000000000..118ce44c4e7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe036_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe036.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe037_CAV11_SAFE/safe037.c b/regression/goto-instrument-wmm-core/x86_safe037_CAV11_SAFE/safe037.c new file mode 100644 index 00000000000..48fc03c71a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_CAV11_SAFE/safe037.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe037_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe037_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..25b594927aa --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe037.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe037_POWER_ALL/safe037.c b/regression/goto-instrument-wmm-core/x86_safe037_POWER_ALL/safe037.c new file mode 100644 index 00000000000..48fc03c71a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_POWER_ALL/safe037.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe037_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe037_POWER_ALL/test.desc new file mode 100644 index 00000000000..aa501c30e11 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe037.c +POWER ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe037_POWER_OPC/safe037.c b/regression/goto-instrument-wmm-core/x86_safe037_POWER_OPC/safe037.c new file mode 100644 index 00000000000..48fc03c71a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_POWER_OPC/safe037.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe037_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe037_POWER_OPC/test.desc new file mode 100644 index 00000000000..b75b6205fe0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe037.c +POWER OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe037_POWER_OPT/safe037.c b/regression/goto-instrument-wmm-core/x86_safe037_POWER_OPT/safe037.c new file mode 100644 index 00000000000..48fc03c71a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_POWER_OPT/safe037.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe037_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe037_POWER_OPT/test.desc new file mode 100644 index 00000000000..6cf032c02b8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe037.c +POWER OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe037_PSO_ALL/safe037.c b/regression/goto-instrument-wmm-core/x86_safe037_PSO_ALL/safe037.c new file mode 100644 index 00000000000..48fc03c71a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_PSO_ALL/safe037.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe037_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe037_PSO_ALL/test.desc new file mode 100644 index 00000000000..efb88530eb0 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe037.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe037_PSO_OPC/safe037.c b/regression/goto-instrument-wmm-core/x86_safe037_PSO_OPC/safe037.c new file mode 100644 index 00000000000..48fc03c71a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_PSO_OPC/safe037.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe037_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe037_PSO_OPC/test.desc new file mode 100644 index 00000000000..56e32508412 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe037.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe037_PSO_OPT/safe037.c b/regression/goto-instrument-wmm-core/x86_safe037_PSO_OPT/safe037.c new file mode 100644 index 00000000000..48fc03c71a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_PSO_OPT/safe037.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe037_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe037_PSO_OPT/test.desc new file mode 100644 index 00000000000..504686d97f8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe037.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe037_RMO_ALL/safe037.c b/regression/goto-instrument-wmm-core/x86_safe037_RMO_ALL/safe037.c new file mode 100644 index 00000000000..48fc03c71a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_RMO_ALL/safe037.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe037_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe037_RMO_ALL/test.desc new file mode 100644 index 00000000000..b1762f14c02 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe037.c +RMO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe037_RMO_OPC/safe037.c b/regression/goto-instrument-wmm-core/x86_safe037_RMO_OPC/safe037.c new file mode 100644 index 00000000000..48fc03c71a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_RMO_OPC/safe037.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe037_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe037_RMO_OPC/test.desc new file mode 100644 index 00000000000..5db314f5951 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe037.c +RMO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe037_RMO_OPT/safe037.c b/regression/goto-instrument-wmm-core/x86_safe037_RMO_OPT/safe037.c new file mode 100644 index 00000000000..48fc03c71a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_RMO_OPT/safe037.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe037_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe037_RMO_OPT/test.desc new file mode 100644 index 00000000000..8c3f51ba045 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe037.c +RMO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe037_SC_SAFE/safe037.c b/regression/goto-instrument-wmm-core/x86_safe037_SC_SAFE/safe037.c new file mode 100644 index 00000000000..48fc03c71a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_SC_SAFE/safe037.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe037_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_safe037_SC_SAFE/test.desc new file mode 100644 index 00000000000..3c6d4aa0b3c --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe037.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe037_TSO_ALL/safe037.c b/regression/goto-instrument-wmm-core/x86_safe037_TSO_ALL/safe037.c new file mode 100644 index 00000000000..48fc03c71a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_TSO_ALL/safe037.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe037_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_safe037_TSO_ALL/test.desc new file mode 100644 index 00000000000..670f49923cc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe037.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe037_TSO_OPC/safe037.c b/regression/goto-instrument-wmm-core/x86_safe037_TSO_OPC/safe037.c new file mode 100644 index 00000000000..48fc03c71a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_TSO_OPC/safe037.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe037_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_safe037_TSO_OPC/test.desc new file mode 100644 index 00000000000..d95eb897d2e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +safe037.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_safe037_TSO_OPT/safe037.c b/regression/goto-instrument-wmm-core/x86_safe037_TSO_OPT/safe037.c new file mode 100644 index 00000000000..48fc03c71a7 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_TSO_OPT/safe037.c @@ -0,0 +1,69 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + z = 1; + fence(); + __unbuffered_p0_EAX = x; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + x = 1; + fence(); + __unbuffered_p1_EAX = y; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + y = 1; + fence(); + __unbuffered_p2_EAX = z; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 0 && __unbuffered_p1_EAX == 0 && + __unbuffered_p2_EAX == 0), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_safe037_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_safe037_TSO_OPT/test.desc new file mode 100644 index 00000000000..7e77be47de3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_safe037_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +safe037.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin000_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_thin000_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..99291f65788 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin000_CAV11_SAFE/thin000.c b/regression/goto-instrument-wmm-core/x86_thin000_CAV11_SAFE/thin000.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_CAV11_SAFE/thin000.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin000_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_thin000_POWER_ALL/test.desc new file mode 100644 index 00000000000..b3b762c92f3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin000_POWER_ALL/thin000.c b/regression/goto-instrument-wmm-core/x86_thin000_POWER_ALL/thin000.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_POWER_ALL/thin000.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin000_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_thin000_POWER_OPC/test.desc new file mode 100644 index 00000000000..0d97964282e --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin000_POWER_OPC/thin000.c b/regression/goto-instrument-wmm-core/x86_thin000_POWER_OPC/thin000.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_POWER_OPC/thin000.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin000_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_thin000_POWER_OPT/test.desc new file mode 100644 index 00000000000..e34e53f7703 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin000.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin000_POWER_OPT/thin000.c b/regression/goto-instrument-wmm-core/x86_thin000_POWER_OPT/thin000.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_POWER_OPT/thin000.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin000_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_thin000_PSO_ALL/test.desc new file mode 100644 index 00000000000..14987c1a40d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin000_PSO_ALL/thin000.c b/regression/goto-instrument-wmm-core/x86_thin000_PSO_ALL/thin000.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_PSO_ALL/thin000.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin000_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_thin000_PSO_OPC/test.desc new file mode 100644 index 00000000000..11934155e15 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin000_PSO_OPC/thin000.c b/regression/goto-instrument-wmm-core/x86_thin000_PSO_OPC/thin000.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_PSO_OPC/thin000.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin000_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_thin000_PSO_OPT/test.desc new file mode 100644 index 00000000000..b41ae6d3cf2 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin000.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin000_PSO_OPT/thin000.c b/regression/goto-instrument-wmm-core/x86_thin000_PSO_OPT/thin000.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_PSO_OPT/thin000.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin000_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_thin000_RMO_ALL/test.desc new file mode 100644 index 00000000000..87fead62774 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin000_RMO_ALL/thin000.c b/regression/goto-instrument-wmm-core/x86_thin000_RMO_ALL/thin000.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_RMO_ALL/thin000.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin000_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_thin000_RMO_OPC/test.desc new file mode 100644 index 00000000000..c291c35fc8a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin000_RMO_OPC/thin000.c b/regression/goto-instrument-wmm-core/x86_thin000_RMO_OPC/thin000.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_RMO_OPC/thin000.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin000_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_thin000_RMO_OPT/test.desc new file mode 100644 index 00000000000..2702cb107f3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin000.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin000_RMO_OPT/thin000.c b/regression/goto-instrument-wmm-core/x86_thin000_RMO_OPT/thin000.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_RMO_OPT/thin000.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin000_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_thin000_SC_SAFE/test.desc new file mode 100644 index 00000000000..37a0b6e7493 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin000_SC_SAFE/thin000.c b/regression/goto-instrument-wmm-core/x86_thin000_SC_SAFE/thin000.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_SC_SAFE/thin000.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin000_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_thin000_TSO_ALL/test.desc new file mode 100644 index 00000000000..a57eea02842 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin000_TSO_ALL/thin000.c b/regression/goto-instrument-wmm-core/x86_thin000_TSO_ALL/thin000.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_TSO_ALL/thin000.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin000_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_thin000_TSO_OPC/test.desc new file mode 100644 index 00000000000..8c891ca82d3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin000.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin000_TSO_OPC/thin000.c b/regression/goto-instrument-wmm-core/x86_thin000_TSO_OPC/thin000.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_TSO_OPC/thin000.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin000_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_thin000_TSO_OPT/test.desc new file mode 100644 index 00000000000..87272d8e3b3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin000.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin000_TSO_OPT/thin000.c b/regression/goto-instrument-wmm-core/x86_thin000_TSO_OPT/thin000.c new file mode 100644 index 00000000000..3c61f9edecd --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin000_TSO_OPT/thin000.c @@ -0,0 +1,52 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int x = 0; +int y = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = y; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); + __CPROVER_assume(__unbuffered_cnt == 2); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin001_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_thin001_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..ff04027699d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin001_CAV11_SAFE/thin001.c b/regression/goto-instrument-wmm-core/x86_thin001_CAV11_SAFE/thin001.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_CAV11_SAFE/thin001.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin001_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_thin001_POWER_ALL/test.desc new file mode 100644 index 00000000000..fe22bc59ab6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin001_POWER_ALL/thin001.c b/regression/goto-instrument-wmm-core/x86_thin001_POWER_ALL/thin001.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_POWER_ALL/thin001.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin001_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_thin001_POWER_OPC/test.desc new file mode 100644 index 00000000000..b874f612401 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin001_POWER_OPC/thin001.c b/regression/goto-instrument-wmm-core/x86_thin001_POWER_OPC/thin001.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_POWER_OPC/thin001.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin001_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_thin001_POWER_OPT/test.desc new file mode 100644 index 00000000000..59baaccbadc --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_POWER_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin001.c +POWER OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin001_POWER_OPT/thin001.c b/regression/goto-instrument-wmm-core/x86_thin001_POWER_OPT/thin001.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_POWER_OPT/thin001.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin001_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_thin001_PSO_ALL/test.desc new file mode 100644 index 00000000000..854a4e43be6 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin001_PSO_ALL/thin001.c b/regression/goto-instrument-wmm-core/x86_thin001_PSO_ALL/thin001.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_PSO_ALL/thin001.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin001_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_thin001_PSO_OPC/test.desc new file mode 100644 index 00000000000..de9f61e16a8 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin001_PSO_OPC/thin001.c b/regression/goto-instrument-wmm-core/x86_thin001_PSO_OPC/thin001.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_PSO_OPC/thin001.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin001_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_thin001_PSO_OPT/test.desc new file mode 100644 index 00000000000..0fe1ad3f5f5 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin001.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin001_PSO_OPT/thin001.c b/regression/goto-instrument-wmm-core/x86_thin001_PSO_OPT/thin001.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_PSO_OPT/thin001.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin001_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_thin001_RMO_ALL/test.desc new file mode 100644 index 00000000000..a18d0db217d --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin001_RMO_ALL/thin001.c b/regression/goto-instrument-wmm-core/x86_thin001_RMO_ALL/thin001.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_RMO_ALL/thin001.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin001_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_thin001_RMO_OPC/test.desc new file mode 100644 index 00000000000..0f753f26bf3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin001_RMO_OPC/thin001.c b/regression/goto-instrument-wmm-core/x86_thin001_RMO_OPC/thin001.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_RMO_OPC/thin001.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin001_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_thin001_RMO_OPT/test.desc new file mode 100644 index 00000000000..be8d0706a9a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin001.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin001_RMO_OPT/thin001.c b/regression/goto-instrument-wmm-core/x86_thin001_RMO_OPT/thin001.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_RMO_OPT/thin001.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin001_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_thin001_SC_SAFE/test.desc new file mode 100644 index 00000000000..b70e6b95228 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin001_SC_SAFE/thin001.c b/regression/goto-instrument-wmm-core/x86_thin001_SC_SAFE/thin001.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_SC_SAFE/thin001.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin001_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_thin001_TSO_ALL/test.desc new file mode 100644 index 00000000000..06983a36df4 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin001_TSO_ALL/thin001.c b/regression/goto-instrument-wmm-core/x86_thin001_TSO_ALL/thin001.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_TSO_ALL/thin001.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin001_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_thin001_TSO_OPC/test.desc new file mode 100644 index 00000000000..e50c1980dad --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin001.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin001_TSO_OPC/thin001.c b/regression/goto-instrument-wmm-core/x86_thin001_TSO_OPC/thin001.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_TSO_OPC/thin001.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin001_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_thin001_TSO_OPT/test.desc new file mode 100644 index 00000000000..f1330bbed8a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin001.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin001_TSO_OPT/thin001.c b/regression/goto-instrument-wmm-core/x86_thin001_TSO_OPT/thin001.c new file mode 100644 index 00000000000..eddaee2501b --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin001_TSO_OPT/thin001.c @@ -0,0 +1,66 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = z; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); + __CPROVER_assume(__unbuffered_cnt == 3); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin002_CAV11_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_thin002_CAV11_SAFE/test.desc new file mode 100644 index 00000000000..7c77ee04b86 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_CAV11_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +CAV11 SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin002_CAV11_SAFE/thin002.c b/regression/goto-instrument-wmm-core/x86_thin002_CAV11_SAFE/thin002.c new file mode 100644 index 00000000000..b84b5166e4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_CAV11_SAFE/thin002.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = a; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_EAX = z; + a = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1 && __unbuffered_p3_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin002_POWER_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_thin002_POWER_ALL/test.desc new file mode 100644 index 00000000000..43cfa1688d3 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_POWER_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin002.c +POWER ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin002_POWER_ALL/thin002.c b/regression/goto-instrument-wmm-core/x86_thin002_POWER_ALL/thin002.c new file mode 100644 index 00000000000..b84b5166e4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_POWER_ALL/thin002.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = a; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_EAX = z; + a = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1 && __unbuffered_p3_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin002_POWER_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_thin002_POWER_OPC/test.desc new file mode 100644 index 00000000000..3c6f0c46a85 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_POWER_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +POWER OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin002_POWER_OPC/thin002.c b/regression/goto-instrument-wmm-core/x86_thin002_POWER_OPC/thin002.c new file mode 100644 index 00000000000..b84b5166e4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_POWER_OPC/thin002.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = a; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_EAX = z; + a = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1 && __unbuffered_p3_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin002_POWER_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_thin002_POWER_OPT/test.desc index 6e3439b220d..63acd15033c 100644 --- a/regression/goto-instrument-wmm-core/x86_thin002_POWER_OPT/test.desc +++ b/regression/goto-instrument-wmm-core/x86_thin002_POWER_OPT/test.desc @@ -1,6 +1,7 @@ -CORE +CORE glpk thin002.c POWER OPT +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/goto-instrument-wmm-core/x86_thin002_PSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_thin002_PSO_ALL/test.desc new file mode 100644 index 00000000000..27f258f5969 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_PSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +PSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin002_PSO_ALL/thin002.c b/regression/goto-instrument-wmm-core/x86_thin002_PSO_ALL/thin002.c new file mode 100644 index 00000000000..b84b5166e4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_PSO_ALL/thin002.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = a; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_EAX = z; + a = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1 && __unbuffered_p3_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin002_PSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_thin002_PSO_OPC/test.desc new file mode 100644 index 00000000000..04badb1ee04 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_PSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +PSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin002_PSO_OPC/thin002.c b/regression/goto-instrument-wmm-core/x86_thin002_PSO_OPC/thin002.c new file mode 100644 index 00000000000..b84b5166e4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_PSO_OPC/thin002.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = a; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_EAX = z; + a = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1 && __unbuffered_p3_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin002_PSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_thin002_PSO_OPT/test.desc new file mode 100644 index 00000000000..887dda30747 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_PSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin002.c +PSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin002_PSO_OPT/thin002.c b/regression/goto-instrument-wmm-core/x86_thin002_PSO_OPT/thin002.c new file mode 100644 index 00000000000..b84b5166e4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_PSO_OPT/thin002.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = a; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_EAX = z; + a = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1 && __unbuffered_p3_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin002_RMO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_thin002_RMO_ALL/test.desc new file mode 100644 index 00000000000..975018c9c69 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_RMO_ALL/test.desc @@ -0,0 +1,8 @@ +FUTURE +thin002.c +RMO ALL +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin002_RMO_ALL/thin002.c b/regression/goto-instrument-wmm-core/x86_thin002_RMO_ALL/thin002.c new file mode 100644 index 00000000000..b84b5166e4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_RMO_ALL/thin002.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = a; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_EAX = z; + a = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1 && __unbuffered_p3_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin002_RMO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_thin002_RMO_OPC/test.desc new file mode 100644 index 00000000000..8170a320194 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_RMO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +RMO OPC +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin002_RMO_OPC/thin002.c b/regression/goto-instrument-wmm-core/x86_thin002_RMO_OPC/thin002.c new file mode 100644 index 00000000000..b84b5166e4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_RMO_OPC/thin002.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = a; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_EAX = z; + a = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1 && __unbuffered_p3_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin002_RMO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_thin002_RMO_OPT/test.desc new file mode 100644 index 00000000000..8afa134c39a --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_RMO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin002.c +RMO OPT +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin002_RMO_OPT/thin002.c b/regression/goto-instrument-wmm-core/x86_thin002_RMO_OPT/thin002.c new file mode 100644 index 00000000000..b84b5166e4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_RMO_OPT/thin002.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = a; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_EAX = z; + a = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1 && __unbuffered_p3_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin002_SC_SAFE/test.desc b/regression/goto-instrument-wmm-core/x86_thin002_SC_SAFE/test.desc new file mode 100644 index 00000000000..68e8ebe7dd9 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_SC_SAFE/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +SC SAFE +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin002_SC_SAFE/thin002.c b/regression/goto-instrument-wmm-core/x86_thin002_SC_SAFE/thin002.c new file mode 100644 index 00000000000..b84b5166e4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_SC_SAFE/thin002.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = a; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_EAX = z; + a = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1 && __unbuffered_p3_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin002_TSO_ALL/test.desc b/regression/goto-instrument-wmm-core/x86_thin002_TSO_ALL/test.desc new file mode 100644 index 00000000000..196f0aa1461 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_TSO_ALL/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +TSO ALL +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin002_TSO_ALL/thin002.c b/regression/goto-instrument-wmm-core/x86_thin002_TSO_ALL/thin002.c new file mode 100644 index 00000000000..b84b5166e4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_TSO_ALL/thin002.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = a; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_EAX = z; + a = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1 && __unbuffered_p3_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin002_TSO_OPC/test.desc b/regression/goto-instrument-wmm-core/x86_thin002_TSO_OPC/test.desc new file mode 100644 index 00000000000..cbd15fab380 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_TSO_OPC/test.desc @@ -0,0 +1,8 @@ +THOROUGH +thin002.c +TSO OPC +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin002_TSO_OPC/thin002.c b/regression/goto-instrument-wmm-core/x86_thin002_TSO_OPC/thin002.c new file mode 100644 index 00000000000..b84b5166e4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_TSO_OPC/thin002.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = a; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_EAX = z; + a = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1 && __unbuffered_p3_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-core/x86_thin002_TSO_OPT/test.desc b/regression/goto-instrument-wmm-core/x86_thin002_TSO_OPT/test.desc new file mode 100644 index 00000000000..6e9a9739346 --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_TSO_OPT/test.desc @@ -0,0 +1,8 @@ +CORE glpk +thin002.c +TSO OPT +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/goto-instrument-wmm-core/x86_thin002_TSO_OPT/thin002.c b/regression/goto-instrument-wmm-core/x86_thin002_TSO_OPT/thin002.c new file mode 100644 index 00000000000..b84b5166e4f --- /dev/null +++ b/regression/goto-instrument-wmm-core/x86_thin002_TSO_OPT/thin002.c @@ -0,0 +1,79 @@ +void fence() +{ + asm("sync"); +} +void lwfence() +{ + asm("lwsync"); +} +void isync() +{ + asm("isync"); +} + +int __unbuffered_cnt = 0; +int __unbuffered_p0_EAX = 0; +int __unbuffered_p1_EAX = 0; +int __unbuffered_p2_EAX = 0; +int __unbuffered_p3_EAX = 0; +int a = 0; +int x = 0; +int y = 0; +int z = 0; + +void *P0(void *arg) +{ + __unbuffered_p0_EAX = a; + x = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P1(void *arg) +{ + __unbuffered_p1_EAX = x; + y = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P2(void *arg) +{ + __unbuffered_p2_EAX = y; + z = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +void *P3(void *arg) +{ + __unbuffered_p3_EAX = z; + a = 1; + // Instrumentation for CPROVER + fence(); + __unbuffered_cnt++; +} + +int main() +{ +__CPROVER_ASYNC_0: + P0(0); +__CPROVER_ASYNC_1: + P1(0); +__CPROVER_ASYNC_2: + P2(0); +__CPROVER_ASYNC_3: + P3(0); + __CPROVER_assume(__unbuffered_cnt == 4); + fence(); + // EXPECT:exists + __CPROVER_assert( + !(__unbuffered_p0_EAX == 1 && __unbuffered_p1_EAX == 1 && + __unbuffered_p2_EAX == 1 && __unbuffered_p3_EAX == 1), + "Program was expected to be safe for X86, model checker should have said " + "NO.\nThis likely is a bug in the tool chain."); + return 0; +} diff --git a/regression/goto-instrument-wmm-full.tgz b/regression/goto-instrument-wmm-full.tgz deleted file mode 100644 index 12845d01390..00000000000 Binary files a/regression/goto-instrument-wmm-full.tgz and /dev/null differ diff --git a/scripts/cpplint.py b/scripts/cpplint.py index f963752b175..b75f15755eb 100755 --- a/scripts/cpplint.py +++ b/scripts/cpplint.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 # -*- coding: utf-8 -*- # # Copyright (c) 2009 Google Inc. All rights reserved. @@ -970,7 +970,7 @@ def PrintErrorCounts(self): for category, count in self.errors_by_category.iteritems(): sys.stderr.write('Category \'%s\' errors found: %d\n' % (category, count)) - sys.stdout.write('# Total errors found: %d\n' % self.error_count) + sys.stdout.write('# Total errors found: %d\n' % self.error_count) _cpplint_state = _CppLintState() diff --git a/scripts/diff_to_added_lines.py b/scripts/diff_to_added_lines.py index 2b4096d3978..7a37cab8c52 100755 --- a/scripts/diff_to_added_lines.py +++ b/scripts/diff_to_added_lines.py @@ -1,13 +1,16 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -from __future__ import print_function +import sys + +def eprint(*args, **kwargs): + print(*args, file=sys.stderr, **kwargs) def diff_to_added_lines(diff_file, repository_root, out_stream): try: import unidiff except ImportError: - print("diff_to_added_lines.py requires unidiff, use `pip install --user unidiff` to install") + eprint("diff_to_added_lines.py requires unidiff, use `pip install --user unidiff` to install") sys.exit(1) import os.path @@ -36,12 +39,9 @@ def diff_to_added_lines(diff_file, repository_root, out_stream): json.dump(added_lines, out_stream) if __name__ == "__main__": - - import sys - if len(sys.argv) != 3: - print("diff_to_added_lines.py: converts a unified-diff file into a JSON dictionary mapping filenames onto an array of added or modified line numbers", file=sys.stderr) - print("Usage: diff_to_added_lines.py diff.patch repository_root_directory", file=sys.stderr) + eprint("diff_to_added_lines.py: converts a unified-diff file into a JSON dictionary mapping filenames onto an array of added or modified line numbers") + eprint("Usage: diff_to_added_lines.py diff.patch repository_root_directory") sys.exit(1) diff --git a/scripts/expected_doxygen_warnings.txt b/scripts/expected_doxygen_warnings.txt index 22118e773e8..affa60f29cb 100644 --- a/scripts/expected_doxygen_warnings.txt +++ b/scripts/expected_doxygen_warnings.txt @@ -23,7 +23,7 @@ warning: Included by graph for 'goto_functions.h' not generated, too many nodes warning: Included by graph for 'goto_model.h' not generated, too many nodes (111), threshold is 60. Consider increasing DOT_GRAPH_MAX_NODES. warning: Included by graph for 'arith_tools.h' not generated, too many nodes (181), threshold is 60. Consider increasing DOT_GRAPH_MAX_NODES. warning: Included by graph for 'c_types.h' not generated, too many nodes (141), threshold is 60. Consider increasing DOT_GRAPH_MAX_NODES. -warning: Included by graph for 'config.h' not generated, too many nodes (87), threshold is 60. Consider increasing DOT_GRAPH_MAX_NODES. +warning: Included by graph for 'config.h' not generated, too many nodes (88), threshold is 60. Consider increasing DOT_GRAPH_MAX_NODES. warning: Included by graph for 'exception_utils.h' not generated, too many nodes (61), threshold is 60. Consider increasing DOT_GRAPH_MAX_NODES. warning: Included by graph for 'expr.h' not generated, too many nodes (87), threshold is 60. Consider increasing DOT_GRAPH_MAX_NODES. warning: Included by graph for 'expr_util.h' not generated, too many nodes (61), threshold is 60. Consider increasing DOT_GRAPH_MAX_NODES. diff --git a/src/config.inc b/src/config.inc index 33843429dc4..eaac614a3f7 100644 --- a/src/config.inc +++ b/src/config.inc @@ -76,7 +76,7 @@ endif OSX_IDENTITY="Developer ID Application: Daniel Kroening" # Detailed version information -CBMC_VERSION = 5.25.0 +CBMC_VERSION = 5.26.0 # Use the CUDD library for BDDs, can be installed using `make -C src cudd-download` # CUDD = ../../cudd-3.0.0 diff --git a/src/goto-instrument/loop_utils.cpp b/src/goto-instrument/loop_utils.cpp index ca995bd3991..626cbd88789 100644 --- a/src/goto-instrument/loop_utils.cpp +++ b/src/goto-instrument/loop_utils.cpp @@ -65,10 +65,9 @@ void get_modifies_lhs( modifies.insert(lhs); else if(lhs.id()==ID_dereference) { - modifiest m=local_may_alias.get(t, to_dereference_expr(lhs).pointer()); - for(modifiest::const_iterator m_it=m.begin(); - m_it!=m.end(); m_it++) - get_modifies_lhs(local_may_alias, t, *m_it, modifies); + const auto &pointer = to_dereference_expr(lhs).pointer(); + for(const auto &mod : local_may_alias.get(t, pointer)) + modifies.insert(dereference_exprt{mod}); } else if(lhs.id()==ID_member) { diff --git a/src/goto-instrument/wmm/cycle_collection.cpp b/src/goto-instrument/wmm/cycle_collection.cpp index 7b55a74e7c5..a36ac99b851 100644 --- a/src/goto-instrument/wmm/cycle_collection.cpp +++ b/src/goto-instrument/wmm/cycle_collection.cpp @@ -425,13 +425,15 @@ bool event_grapht::graph_explorert::backtrack( if(!no_comm) { /* we then visit via com transitions, if existing */ + std::set edges_to_remove; + for(wmm_grapht::edgest::const_iterator w_it=egraph.com_out(vertex).begin(); w_it!=egraph.com_out(vertex).end(); w_it++) { const event_idt w=w_it->first; if(w < source) - egraph.remove_com_edge(vertex, w); + edges_to_remove.insert(w); else if(w==source && point_stack.size()>=4 && (unsafe_met_updated || this_vertex.unsafe_pair(egraph[source], model))) @@ -473,6 +475,9 @@ bool event_grapht::graph_explorert::backtrack( irep_idt(), model); } + + for(const event_idt e : edges_to_remove) + egraph.remove_com_edge(vertex, e); } if(f) diff --git a/src/symtab2gb/symtab2gb_parse_options.cpp b/src/symtab2gb/symtab2gb_parse_options.cpp index 9f42956a915..39ca783e37d 100644 --- a/src/symtab2gb/symtab2gb_parse_options.cpp +++ b/src/symtab2gb/symtab2gb_parse_options.cpp @@ -17,6 +17,8 @@ Author: Diffblue Ltd. #include #include #include + +#include #include #include #include @@ -81,6 +83,7 @@ static void run_symtab2gb( throw invalid_source_file_exceptiont{ "failed to typecheck symbol table from file '" + symtab_filename + "'"}; } + config.set_from_symbol_table(symtab); goto_modelt goto_model{}; goto_model.symbol_table = symtab; goto_convert(goto_model, message_handler); @@ -110,6 +113,7 @@ int symtab2gb_parse_optionst::doit() { gb_filename = cmdline.get_value(SYMTAB2GB_OUT_FILE_OPT); } + config.set(cmdline); run_symtab2gb(symtab_filenames, gb_filename); return CPROVER_EXIT_SUCCESS; }